otopr_derive/
lib.rs

1#![deny(warnings)]
2#![deny(unused_lifetimes)]
3// No unsafe code should ever be used in derive macros.
4#![forbid(unsafe_code)]
5
6use proc_macro::TokenStream;
7use syn::{parse_macro_input, DeriveInput};
8
9mod common;
10mod decode;
11mod encode;
12mod enumeration;
13
14#[proc_macro_derive(EncodableMessage, attributes(otopr))]
15pub fn derive_encodable_message(ts: TokenStream) -> TokenStream {
16    encode::derive_encodable_message(parse_macro_input!(ts as DeriveInput))
17        .unwrap_or_else(|e| e.into_compile_error())
18        .into()
19}
20
21#[proc_macro_derive(DecodableMessage, attributes(otopr))]
22pub fn derive_decodable_message(ts: TokenStream) -> TokenStream {
23    decode::derive_decodable_message(parse_macro_input!(ts as DeriveInput))
24        .unwrap_or_else(|e| e.into_compile_error())
25        .into()
26}
27
28#[proc_macro_derive(Enumeration)]
29pub fn derive_enumeration(ts: TokenStream) -> TokenStream {
30    enumeration::derive_enumeration(parse_macro_input!(ts as DeriveInput))
31        .unwrap_or_else(|e| e.into_compile_error())
32        .into()
33}