1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
extern crate proc_macro; use proc_macro::TokenStream; use syn::{parse_macro_input, DeriveInput}; mod field; mod ty; mod attribute; use attribute::Attribute; mod enum_value; use crate::reader::{GetAttributeParam, ReaderConfig}; use enum_value::EnumValue; mod reader; #[proc_macro_derive(YuiEnumValue, attributes(variant_value))] pub fn derive_enum_value(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let enum_value = EnumValue::from_ast(&input); TokenStream::from(match enum_value { Ok(value) => value.get_implement(), Err(e) => e.to_compile_error(), }) } #[proc_macro_derive(YuiAttribute, attributes(attribute, attribute_field))] pub fn derive_attribute(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let attribute = Attribute::from_ast(&input); TokenStream::from(match attribute { Ok(value) => value.get_implement(), Err(e) => e.to_compile_error(), }) } #[proc_macro] pub fn generate_reader(input: TokenStream) -> TokenStream { let config = parse_macro_input!(input as ReaderConfig); TokenStream::from(config.get_reader()) } #[proc_macro] pub fn __get_attribute(input: TokenStream) -> TokenStream { let config = parse_macro_input!(input as GetAttributeParam); TokenStream::from(config.get_attribute()) } #[proc_macro] pub fn __has_attribute(input: TokenStream) -> TokenStream { let config = parse_macro_input!(input as GetAttributeParam); TokenStream::from(config.has_attribute()) }