Yui
Yui is an attribute reader for Rust.
Features
Attribute structure
Yui provides a derive macro YuiAttribute to create attribute structure by struct, StructStruct, TupleStruct and NoFieldStruct are all supported.
use YuiAttribute;
;
;
Types
- String:
Stringin Rust. - Bool:
boolin Rust. - Integer: any integer types in Rust.
- Float: any float types in Rust.
- Object: other attribute structure.
- Enum: defined enum, remember to use
enum_value=trueoption. - Vec: Vec of T(T can`t be Object, Vec or HashMap).
- HashMap<String, T>: HashMap of T mapping by
StringSkey. If you want to make a field optional, useOption<T>on the field type.
use ;
;
Options
alias
Generated reader will parse the field with the given name instead of its field name in Rust.default
Set the default value for this field. If the value is not present when parsing, the default value will be set to the field, even the field is optional.Object,VecorHashMapfields can`t have default value.enum_value
useenum_value=trueon Enum type field.
Enum
Use derive YuiEnumValue on Enum to create a Enum value type.
use YuiEnumValue;
And then, the enum can be used as a field type.
variant_valueattribute
Customize a string corresponding value to variant(default is the snake case of variant name in Rust).
use YuiEnumValue;
Parse attributes with synandquote
yui::AttributeStructs<T> can be used in parse_macro_input!
let attributes = parse_macro_inpit!;
If you want to parse attribute from syn::Meta, use yui::AttributeStruct::from_meta().
And attribute structure with value can be convert to token automatically. But the visibility of each field must be public.
use TokenStream;
Generate derive macro
If you want to use builtin reader generator, enable generate-reader feature.
Macro generate_reader is used to generate a derive macro.
use generate_reader;
generated_reader!;
The macro will generate a public derive, it can be use to read attributes of struct ,enum or union, and record the metadata by generate impl block.
Read attributes
Use the generated derive macro on a struct, and you can use the macro has_attribute and get_attributeto process attributes of the struct.
The feature require nightly rustc because proc_macro_hygiene is required.
use ;