1extern crate proc_macro;
10
11use proc_macro::TokenStream;
12use quote::quote;
13
14#[proc_macro_derive(AntTx)]
15pub fn derive_ant_tx(input: TokenStream) -> TokenStream {
16 let ast = syn::parse(input).unwrap();
17
18 impl_ant_tx(&ast)
19}
20
21fn impl_ant_tx(ast: &syn::DeriveInput) -> TokenStream {
22 let name = &ast.ident;
23 let gen = quote! {
24 impl AntTxMessageType for #name {
25 fn serialize_message(&self, buf: &mut [u8]) -> Result<usize, PackingError> {
26 let len = PackedStructSlice::packed_bytes_size(Some(self))?;
27 self.pack_to_slice(&mut buf[..len])?;
28 Ok(len)
29 }
30 fn get_tx_msg_id(&self) -> TxMessageId {
31 TxMessageId::#name
32 }
33 }
34 };
35 gen.into()
36}
37
38#[proc_macro_derive(DataPage)]
39pub fn derive_data_page(input: TokenStream) -> TokenStream {
40 let ast = syn::parse(input).unwrap();
41
42 impl_data_page(&ast)
43}
44
45fn impl_data_page(ast: &syn::DeriveInput) -> TokenStream {
46 let name = &ast.ident;
47 let gen = quote! {
48 impl #name {
49 fn get_datapage_number(&self) -> u8 {
50 self.data_page_number.into()
51 }
52 }
53 };
54 gen.into()
55}