1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use proc_macro::TokenStream;
use syn;
use crate::packable_struct_sum::impl_packable_struct_sum;
use crate::packable_struct::impl_packable_struct;
use crate::pack_unpack::{impl_pack, impl_unpack};

mod packable_struct;
mod packable_struct_sum;
mod pack_unpack;
mod common;

#[proc_macro_derive(PackableStruct)]
pub fn packable_struct_derive(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();

    impl_packable_struct(&ast).into()
}

#[proc_macro_derive(PackableStructSum, attributes(tag))]
pub fn packable_struct_sum_derive(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();

    impl_packable_struct_sum(&ast)
}

#[proc_macro_derive(Pack, attributes(tag))]
pub fn pack_derive(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();

    impl_pack(&ast).into()
}

#[proc_macro_derive(Unpack, attributes(tag))]
pub fn unpack_derive(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();

    impl_unpack(&ast).into()
}