savory_elements_derive/
lib.rs

1#![forbid(unsafe_code)]
2
3#[macro_use]
4extern crate darling;
5extern crate proc_macro2;
6#[macro_use]
7extern crate quote;
8extern crate syn;
9
10use darling::FromDeriveInput;
11use proc_macro::TokenStream;
12
13pub(crate) mod element;
14
15#[proc_macro_derive(Element, attributes(element))]
16pub fn derive_model(input: TokenStream) -> TokenStream {
17    let input = syn::parse_macro_input!(input as syn::DeriveInput);
18    let element_impl = match element::Element::from_derive_input(&input) {
19        Ok(val) => val,
20        Err(err) => panic!("{}", err),
21    };
22    (quote! {
23        #element_impl
24    })
25    .into()
26}