| use crate::container::*; |
| use proc_macro2::Span; |
| use quote::quote; |
| use syn::{Data, Ident}; |
| |
| pub fn derive_ber_alias(s: synstructure::Structure) -> proc_macro2::TokenStream { |
| let ast = s.ast(); |
| |
| let container = match &ast.data { |
| Data::Struct(ds) => Container::from_datastruct(ds, ast, ContainerType::Alias), |
| _ => 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_alias(s: synstructure::Structure) -> proc_macro2::TokenStream { |
| let ast = s.ast(); |
| |
| let container = match &ast.data { |
| Data::Struct(ds) => Container::from_datastruct(ds, ast, ContainerType::Alias), |
| _ => 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 |
| } |