async-graphql/async-graphql-derive/src/lib.rs
2020-03-03 11:48:43 +08:00

54 lines
1.7 KiB
Rust

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::Object::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(),
}
}