encoding_asn1_derive/
lib.rs

1extern crate proc_macro;
2
3mod marshal;
4mod unmarshal;
5
6use proc_macro_error::proc_macro_error;
7
8#[proc_macro_derive(Marshal, attributes(asn1))]
9#[proc_macro_error]
10pub fn marshal_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
11    let input: syn::DeriveInput = syn::parse(input).unwrap();
12
13    match input.data {
14        syn::Data::Struct(v) => marshal::derive_struct_impl(input.ident, input.generics, v),
15        syn::Data::Enum(v) => marshal::derive_enum_impl(input.ident, input.generics, v),
16        _ => todo!(),
17    }
18    .into()
19}
20
21#[proc_macro_derive(Unmarshal, attributes(asn1))]
22#[proc_macro_error]
23pub fn unmarshal_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
24    let input: syn::DeriveInput = syn::parse(input).unwrap();
25
26    match input.data {
27        syn::Data::Struct(v) => unmarshal::derive_struct_impl(input.ident, input.generics, v),
28        syn::Data::Enum(v) => unmarshal::derive_enum_impl(input.ident, input.generics, v),
29        _ => todo!(),
30    }
31    .into()
32}