1mod build_error;
2mod meta_map;
3mod search_meta;
4mod strand_enum;
5mod strand_struct;
6
7use strand_enum::strand_derive_enum;
8use strand_struct::strand_derive_struct;
9
10use proc_macro::TokenStream;
11
12#[proc_macro_derive(Strand, attributes(strand))]
13pub fn strand_derive(input: TokenStream) -> TokenStream {
14 let input = syn::parse_macro_input!(input as syn::DeriveInput);
15
16 match &input.data {
17 syn::Data::Struct(_) => strand_derive_struct(input)
18 .unwrap_or_else(syn::Error::into_compile_error)
19 .into(),
20 syn::Data::Enum(_) => strand_derive_enum(input)
21 .unwrap_or_else(syn::Error::into_compile_error)
22 .into(),
23 syn::Data::Union(_) => syn::Error::new_spanned(input, "expected list, \"#[strand(..)]\"")
24 .to_compile_error()
25 .into(),
26 }
27}