Skip to content

Commit

Permalink
ToDerSequence: add support for struct lifetime
Browse files Browse the repository at this point in the history
  • Loading branch information
chifflier committed Jan 13, 2025
1 parent d5de9ba commit 2171df0
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
7 changes: 6 additions & 1 deletion derive/src/sequence.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::container::*;
use proc_macro2::Span;
use quote::quote;
use syn::{Data, Ident};
use syn::{Data, Ident, WherePredicate};

pub fn derive_ber_sequence(s: synstructure::Structure) -> proc_macro2::TokenStream {
let ast = s.ast();
Expand Down Expand Up @@ -78,6 +78,11 @@ pub fn derive_toder_sequence(s: synstructure::Structure) -> proc_macro2::TokenSt

//let lifetime = Lifetime::new("'ber", Span::call_site());
let wh = &container.where_predicates;
// we must filter out the 'ber lifetime (added for parsers, but not used here)
let wh = wh.iter().filter(|predicate| match predicate {
WherePredicate::Lifetime(lft) => lft.lifetime.ident != "ber",
_ => true,
});

let impl_to_der_len = container.gen_to_der_len();
let impl_write_der_header = container.gen_write_der_header();
Expand Down
29 changes: 29 additions & 0 deletions tests/run-pass/toder_sequence_lifetime.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
use asn1_rs::*;
use hex_literal::hex;

#[derive(Debug, PartialEq, DerSequence, ToDerSequence)]
//#[debug_derive]
pub struct T1<'a> {
a: u32,
b: u16,
c: u16,
d: &'a str,
}

fn main() {
let input = &hex!("300f0201 01020102 020103 0c0461626364");
let (rem, t1) = T1::from_der(input).expect("parsing failed");
assert!(rem.is_empty());
assert_eq!(
t1,
T1 {
a: 1,
b: 2,
c: 3,
d: "abcd"
}
);
// serialize back data
let output = t1.to_der_vec().expect("serialization failed");
assert_eq!(&input[..], output);
}
2 changes: 1 addition & 1 deletion tests/run-pass/toder_sequence_simple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use asn1_rs::*;
use hex_literal::hex;

#[derive(Debug, PartialEq, DerSequence, ToDerSequence)]
#[debug_derive]
//#[debug_derive]
pub struct T1 {
a: u32,
b: u16,
Expand Down

0 comments on commit 2171df0

Please sign in to comment.