1#![deny(clippy::all, clippy::cargo)]
2#![warn(clippy::pedantic)]
3
4use darling::FromDeriveInput;
5use proc_macro::TokenStream;
6use process::process;
7use syn::parse_macro_input;
8
9mod parse;
10mod process;
11mod write;
12
13#[proc_macro_derive(Encodeable, attributes(encode))]
14pub fn derive(input: TokenStream) -> TokenStream {
15 let derive_input = parse_macro_input!(input as syn::DeriveInput);
16
17 let receiver = match parse::Receiver::from_derive_input(&derive_input) {
18 Ok(opts) => opts,
19 Err(e) => return e.write_errors().into(),
20 };
21
22 let processed = process(receiver);
23
24 write::write(processed).into()
25}