diff options
Diffstat (limited to 'rust/vendor/asn1-rs-derive/src/set.rs')
-rw-r--r-- | rust/vendor/asn1-rs-derive/src/set.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/rust/vendor/asn1-rs-derive/src/set.rs b/rust/vendor/asn1-rs-derive/src/set.rs new file mode 100644 index 0000000..90ea04a --- /dev/null +++ b/rust/vendor/asn1-rs-derive/src/set.rs @@ -0,0 +1,61 @@ +use crate::container::*; +use proc_macro2::Span; +use quote::quote; +use syn::{Data, Ident}; + +pub fn derive_ber_set(s: synstructure::Structure) -> proc_macro2::TokenStream { + let ast = s.ast(); + + let container = match &ast.data { + Data::Struct(ds) => Container::from_datastruct(ds, ast, ContainerType::Set), + _ => panic!("Unsupported type, cannot derive"), + }; + + let debug_derive = ast.attrs.iter().any(|attr| { + attr.path + .is_ident(&Ident::new("debug_derive", Span::call_site())) + }); + + let impl_tryfrom = container.gen_tryfrom(); + let impl_tagged = container.gen_tagged(); + let ts = s.gen_impl(quote! { + extern crate asn1_rs; + + #impl_tryfrom + #impl_tagged + }); + if debug_derive { + eprintln!("{}", ts); + } + ts +} + +pub fn derive_der_set(s: synstructure::Structure) -> proc_macro2::TokenStream { + let ast = s.ast(); + + let container = match &ast.data { + Data::Struct(ds) => Container::from_datastruct(ds, ast, ContainerType::Set), + _ => panic!("Unsupported type, cannot derive"), + }; + + let debug_derive = ast.attrs.iter().any(|attr| { + attr.path + .is_ident(&Ident::new("debug_derive", Span::call_site())) + }); + let impl_tryfrom = container.gen_tryfrom(); + let impl_tagged = container.gen_tagged(); + let impl_checkconstraints = container.gen_checkconstraints(); + let impl_fromder = container.gen_fromder(); + let ts = s.gen_impl(quote! { + extern crate asn1_rs; + + #impl_tryfrom + #impl_tagged + #impl_checkconstraints + #impl_fromder + }); + if debug_derive { + eprintln!("{}", ts); + } + ts +} |