From 83bbc115fa940661f676ada857429083d1aa7bc0 Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Tue, 1 Feb 2022 10:11:32 -0700 Subject: [PATCH] der_derive: have `Sequence` macro derive `DecodeValue` The proc macro previously derived the `Decode` trait, which is not composable with context-specific fields, which depend on the `DecodeValue` trait in order to support IMPLICIT fields. This commit changes the custom derive macro for `Sequence` to produce a `DecodeValue` impl instead of `Decode`. This leverages the newly introduced `SequenceRef` type from #374. --- der/derive/src/sequence.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/der/derive/src/sequence.rs b/der/derive/src/sequence.rs index 307634917..8cbebc036 100644 --- a/der/derive/src/sequence.rs +++ b/der/derive/src/sequence.rs @@ -84,9 +84,13 @@ impl DeriveSequence { } quote! { - impl<#lt_params> ::der::Decodable<#lifetime> for #ident<#lt_params> { - fn decode(decoder: &mut ::der::Decoder<#lifetime>) -> ::der::Result { - decoder.sequence(|decoder| { + impl<#lt_params> ::der::DecodeValue<#lifetime> for #ident<#lt_params> { + fn decode_value( + decoder: &mut ::der::Decoder<#lifetime>, + length: ::der::Length, + ) -> ::der::Result { + use ::der::DecodeValue; + ::der::asn1::SequenceRef::decode_value(decoder, length)?.decode_body(|decoder| { #(#decode_body)* Ok(Self {