1use darling::FromDeriveInput;
2use syn::parse_macro_input;
3
4use crate::{attrs::ContainerAttrs, config::MacroConfig, context::MacroContext};
5
6mod attrs;
7mod build_schema;
8pub(crate) mod config;
9pub(crate) mod context;
10mod into_document;
11mod parse_document;
12
13#[proc_macro_derive(IntoDocument, attributes(eure))]
14pub fn into_document_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
15 let input = parse_macro_input!(input as syn::DeriveInput);
16 into_document::derive(create_context(input)).into()
17}
18
19#[proc_macro_derive(ParseDocument, attributes(eure))]
20pub fn parse_document_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
21 let input = parse_macro_input!(input as syn::DeriveInput);
22 parse_document::derive(create_context(input)).into()
23}
24
25#[proc_macro_derive(BuildSchema, attributes(eure))]
26pub fn build_schema_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
27 let input = parse_macro_input!(input as syn::DeriveInput);
28 build_schema::derive(create_context(input)).into()
29}
30
31fn create_context(input: syn::DeriveInput) -> MacroContext {
32 let attrs = ContainerAttrs::from_derive_input(&input).expect("Failed to parse eure attributes");
33 MacroContext::new(MacroConfig::from_attrs(attrs), input)
34}