extern crate proc_macro; mod args; mod r#enum; mod input_object; mod object; mod utils; use proc_macro::TokenStream; use syn::parse_macro_input; use syn::{AttributeArgs, DeriveInput}; #[proc_macro_attribute] #[allow(non_snake_case)] pub fn Object(args: TokenStream, input: TokenStream) -> TokenStream { let object_args = match args::Object::parse(parse_macro_input!(args as AttributeArgs)) { Ok(object_args) => object_args, Err(err) => return err.to_compile_error().into(), }; let input = parse_macro_input!(input as DeriveInput); match object::generate(&object_args, &input) { Ok(expanded) => expanded, Err(err) => err.to_compile_error().into(), } } #[proc_macro_attribute] #[allow(non_snake_case)] pub fn Enum(args: TokenStream, input: TokenStream) -> TokenStream { let enum_args = match args::Enum::parse(parse_macro_input!(args as AttributeArgs)) { Ok(enum_args) => enum_args, Err(err) => return err.to_compile_error().into(), }; let input = parse_macro_input!(input as DeriveInput); match r#enum::generate(&enum_args, &input) { Ok(expanded) => expanded, Err(err) => err.to_compile_error().into(), } } #[proc_macro_attribute] #[allow(non_snake_case)] pub fn InputObject(args: TokenStream, input: TokenStream) -> TokenStream { let object_args = match args::InputObject::parse(parse_macro_input!(args as AttributeArgs)) { Ok(enum_args) => enum_args, Err(err) => return err.to_compile_error().into(), }; let input = parse_macro_input!(input as DeriveInput); match input_object::generate(&object_args, &input) { Ok(expanded) => expanded, Err(err) => err.to_compile_error().into(), } }