From 880f5beaa98fb1373016c2d83d223c9965ac12e8 Mon Sep 17 00:00:00 2001 From: Nicolas Stalder Date: Sun, 28 Feb 2021 21:46:28 +0100 Subject: [PATCH] Bugfix and improvements --- derive/src/encodable.rs | 1 + src/traits.rs | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/derive/src/encodable.rs b/derive/src/encodable.rs index e82e92c..362135a 100644 --- a/derive/src/encodable.rs +++ b/derive/src/encodable.rs @@ -126,6 +126,7 @@ impl DeriveEncodableStruct { F: FnOnce(&[&dyn flexiber::Encodable]) -> flexiber::Result, { use core::convert::TryFrom; + use flexiber::TagLike; field_encoder(&[#encode_fields]) } } diff --git a/src/traits.rs b/src/traits.rs index 1d14711..7024b4d 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -137,6 +137,9 @@ pub trait EncodableHeapless: Encodable { } } +#[cfg(feature = "heapless")] +impl EncodableHeapless for X where X: Encodable {} + /// Types that can be tagged. pub(crate) trait Taggable: Sized { fn tagged(&self, tag: T) -> TaggedValue<&Self, T> { @@ -241,7 +244,7 @@ where // } // } -impl<'a> Encodable for &'a [u8] { +impl Encodable for &[u8] { fn encoded_length(&self) -> Result { self.len().try_into() } @@ -252,6 +255,23 @@ impl<'a> Encodable for &'a [u8] { } } +impl Encodable for Option<&[u8]> { + fn encoded_length(&self) -> Result { + match self { + Some(slice) => slice.encoded_length(), + None => Ok(Length::zero()), + } + } + + /// Encode this value as BER-TLV using the provided [`Encoder`]. + fn encode(&self, encoder: &mut Encoder<'_>) -> Result<()> { + match self { + Some(slice) => encoder.bytes(slice), + None => Ok(()) + } + } +} + macro_rules! impl_array { ($($N:literal),*) => { $(