1use darling::FromDeriveInput;
2use syn::{parse_macro_input, DeriveInput};
3
4use crate::{
5 lock_schema::LockSchemaReceiver,
6 postcard_codec::{FromBytesReceiver, ToBytesReceiver},
7};
8
9mod lock_schema;
10mod postcard_codec;
11
12#[proc_macro_derive(LockSchema, attributes(typelock, secure))]
13pub fn derive_lock_schema(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
14 let input = parse_macro_input!(input as DeriveInput);
15
16 let input = match LockSchemaReceiver::from_derive_input(&input) {
17 Ok(val) => val,
18 Err(e) => return e.write_errors().into(),
19 };
20
21 lock_schema::generate(&input)
22 .unwrap_or_else(|e| e.into_compile_error())
23 .into()
24}
25
26#[proc_macro_derive(ToBytes)]
27pub fn derive_to_bytes(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
28 let input = parse_macro_input!(input as DeriveInput);
29
30 let input = match ToBytesReceiver::from_derive_input(&input) {
31 Ok(val) => val,
32 Err(e) => return e.write_errors().into(),
33 };
34
35 postcard_codec::generate_to_bytes(&input)
36 .unwrap_or_else(|e| e.into_compile_error())
37 .into()
38}
39
40#[proc_macro_derive(FromBytes)]
41pub fn derive_from_bytes(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
42 let input = parse_macro_input!(input as DeriveInput);
43
44 let input = match FromBytesReceiver::from_derive_input(&input) {
45 Ok(val) => val,
46 Err(e) => return e.write_errors().into(),
47 };
48
49 postcard_codec::generate_from_bytes(&input)
50 .unwrap_or_else(|e| e.into_compile_error())
51 .into()
52}