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
39
40
41
extern crate proc_macro;
use borsh_derive_internal::*;
use proc_macro::TokenStream;
use syn::{ItemEnum, ItemStruct, ItemUnion};
#[proc_macro_derive(BorshSerialize, attributes(borsh_skip))]
pub fn borsh_serialize(input: TokenStream) -> TokenStream {
let res = if let Ok(input) = syn::parse::<ItemStruct>(input.clone()) {
struct_ser(&input)
} else if let Ok(input) = syn::parse::<ItemEnum>(input.clone()) {
enum_ser(&input)
} else if let Ok(input) = syn::parse::<ItemUnion>(input.clone()) {
union_ser(&input)
} else {
unreachable!()
};
TokenStream::from(match res {
Ok(res) => res,
Err(err) => err.to_compile_error(),
})
}
#[proc_macro_derive(BorshDeserialize, attributes(borsh_skip, borsh_init))]
pub fn borsh_deserialize(input: TokenStream) -> TokenStream {
let res = if let Ok(input) = syn::parse::<ItemStruct>(input.clone()) {
struct_de(&input)
} else if let Ok(input) = syn::parse::<ItemEnum>(input.clone()) {
enum_de(&input)
} else if let Ok(input) = syn::parse::<ItemUnion>(input.clone()) {
union_de(&input)
} else {
unreachable!()
};
TokenStream::from(match res {
Ok(res) => res,
Err(err) => err.to_compile_error(),
})
}