bird_protocol_derive/
lib.rs

1use syn::{DeriveInput, parse_macro_input};
2
3mod write;
4mod util;
5mod read;
6mod packet;
7
8#[proc_macro_derive(PacketWritable, attributes(variant, var, order, lifetime, enum_type, enum_variant, value))]
9pub fn packet_writable(args: proc_macro::TokenStream) -> proc_macro::TokenStream {
10    match write::write_impl(&parse_macro_input!(args as DeriveInput)) {
11        Ok(ts) => ts,
12        Err(err) => err.into_compile_error(),
13    }.into()
14}
15
16#[proc_macro_derive(PacketReadable, attributes(variant, var, order, lifetime, enum_type, enum_variant, value))]
17pub fn packet_readable(args: proc_macro::TokenStream) -> proc_macro::TokenStream {
18    match read::read_impl(&parse_macro_input!(args as DeriveInput)) {
19        Ok(ts) => ts,
20        Err(err) => err.into_compile_error(),
21    }.into()
22}
23
24#[proc_macro_derive(Packet, attributes(packet))]
25pub fn packet(args: proc_macro::TokenStream) -> proc_macro::TokenStream {
26    match packet::packet_impl(&parse_macro_input!(args as DeriveInput)) {
27        Ok(ts) => ts,
28        Err(err) => err.into_compile_error(),
29    }.into()
30}