From 79d6169c48ab1e08310fddba5a14482b58b95eda Mon Sep 17 00:00:00 2001 From: Kedar Sovani Date: Fri, 24 Feb 2023 19:27:51 +0530 Subject: [PATCH] ToTLV: Support ToTLV for TLVArray --- matter/src/tlv/traits.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/matter/src/tlv/traits.rs b/matter/src/tlv/traits.rs index 60bf73a..2d3cedd 100644 --- a/matter/src/tlv/traits.rs +++ b/matter/src/tlv/traits.rs @@ -383,7 +383,7 @@ impl<'a, T: ToTLV> ToTLV for TLVArray<'a, T> { } tw.end_container() } - Self::Ptr(_) => Err(Error::Invalid), + Self::Ptr(t) => t.to_tlv(tw, tag_type), } } } @@ -404,6 +404,31 @@ impl<'a, T: Debug + ToTLV + FromTLV<'a> + Copy> Debug for TLVArray<'a, T> { } } +impl<'a> ToTLV for TLVElement<'a> { + fn to_tlv(&self, tw: &mut TLVWriter, _tag_type: TagType) -> Result<(), Error> { + match self.get_element_type() { + ElementType::S8(v) => v.to_tlv(tw, self.get_tag()), + ElementType::U8(v) => v.to_tlv(tw, self.get_tag()), + ElementType::U16(v) => v.to_tlv(tw, self.get_tag()), + ElementType::U32(v) => v.to_tlv(tw, self.get_tag()), + ElementType::U64(v) => v.to_tlv(tw, self.get_tag()), + ElementType::False => tw.bool(self.get_tag(), false), + ElementType::True => tw.bool(self.get_tag(), true), + ElementType::Utf8l(v) | ElementType::Utf16l(v) => tw.utf16(self.get_tag(), v), + ElementType::Str8l(v) | ElementType::Str16l(v) => tw.str16(self.get_tag(), v), + ElementType::Null => tw.null(self.get_tag()), + ElementType::Struct(_) => tw.start_struct(self.get_tag()), + ElementType::Array(_) => tw.start_array(self.get_tag()), + ElementType::List(_) => tw.start_list(self.get_tag()), + ElementType::EndCnt => tw.end_container(), + _ => { + error!("ToTLV Not supported"); + Err(Error::Invalid) + } + } + } +} + #[cfg(test)] mod tests { use super::{FromTLV, OctetStr, TLVElement, TLVWriter, TagType, ToTLV};