fadroma_derive_canonize/
lib.rs1mod common;
2mod r#enum;
3mod generic;
4mod non_generic;
5mod generic_enum;
6
7use syn::{parse_macro_input, Item};
8use proc_macro2::Span;
9
10#[proc_macro_derive(Canonize)]
11pub fn derive_canonize(stream: proc_macro::TokenStream) -> proc_macro::TokenStream {
12 let item = parse_macro_input!(stream as Item);
13
14 match item {
15 Item::Struct(input) => {
16 if input.generics.params.len() == 0 {
17 non_generic::generate(input)
18 } else {
19 generic::generate(input)
20 }
21 }
22 Item::Enum(input) => {
23 if input.generics.params.len() == 0 {
24 r#enum::generate(input)
25 } else {
26 generic_enum::generate(input)
27 }
28 }
29 _ => {
30 let error = syn::Error::new(Span::call_site(), "Expecting a struct or enum definition.");
31
32 error.to_compile_error().into()
33 }
34 }
35}