Expand description
Attribute’s properties. Reuse them to define how to parse properties of an attribute.
§Example
use macro_tools::AttributePropertyBoolean;
#[ derive( Debug, Default, Clone, Copy ) ]
pub struct DebugMarker;
#[ derive( Debug, Default, Clone, Copy ) ]
pub struct EnabledMarker;
pub trait AttributePropertyComponent
{
const KEYWORD : &'static str;
}
impl AttributePropertyComponent for DebugMarker
{
const KEYWORD : &'static str = "debug";
}
impl AttributePropertyComponent for EnabledMarker
{
const KEYWORD : &'static str = "enabled";
}
#[ derive( Debug, Default ) ]
struct MyAttributes
{
pub debug : AttributePropertyBoolean< DebugMarker >,
pub enabled : AttributePropertyBoolean< EnabledMarker >,
}
impl syn::parse::Parse for MyAttributes
{
fn parse( input : syn::parse::ParseStream< '_ > ) -> syn::Result< Self >
{
let mut debug = AttributePropertyBoolean::< DebugMarker >::default();
let mut enabled = AttributePropertyBoolean::< EnabledMarker >::default();
while !input.is_empty()
{
let lookahead = input.lookahead1();
if lookahead.peek( syn::Ident )
{
let ident : syn::Ident = input.parse()?;
match ident.to_string().as_str()
{
DebugMarker::KEYWORD => debug = input.parse()?,
EnabledMarker::KEYWORD => enabled = input.parse()?,
_ => return Err( lookahead.error() ),
}
}
else
{
return Err( lookahead.error() );
}
// Optional comma handling
if input.peek( syn::Token![,] )
{
input.parse::< syn::Token![,] >()?;
}
}
Ok( MyAttributes { debug, enabled } )
}
}
let input : syn::Attribute = syn::parse_quote!( #[ attribute( enabled = true ) ] );
let meta = match input.meta
{
syn::Meta::List( meta_list ) => meta_list,
_ => panic!( "Expected a Meta::List" ),
};
let nested_meta_stream : proc_macro2::TokenStream = meta.tokens;
let attrs : MyAttributes = syn::parse2( nested_meta_stream ).unwrap();
println!( "{:?}", attrs );In this example, the AttributePropertyBoolean struct is used to define attributes with boolean properties.
The DebugMarker and EnabledMarker structs act as markers to distinguish between different boolean attributes.
The MyAttributes struct aggregates these boolean attributes.
The Parse implementation for MyAttributes iterates through the attribute’s key-value pairs,
identifying each by its marker’s keyword and parsing the boolean value.
It uses the ParseStream to parse identifiers and their associated values,
matching them to the appropriate marker’s keyword.
If an unrecognized identifier is encountered, it returns an error.
The parse_quote! macro is used to create a syn::Attribute instance with the attribute syntax,
which is then parsed into the MyAttributes struct. The resulting MyAttributes instance is printed to the console.
Re-exports§
pub use super::super::attr_prop;
Modules§
- exposed
- Exposed namespace of the module.
- orphan
- Orphan namespace of the module.
- own
- Own namespace of the module.
- prelude
- Prelude to use essentials:
use my_module::prelude::*.
Structs§
- Attribute
Property Boolean - A generic boolean attribute property.
Defaults to
false. - Attribute
Property Boolean Marker - Default marker for
AttributePropertyBoolean. Used if no marker is defined as parameter. - Attribute
Property Optional Boolean - A generic optional boolean attribute property:
Option< bool >. Defaults tofalse. - Attribute
Property Optional Boolean Marker - Default marker for
AttributePropertyOptionalSingletone. Used if no marker is defined as parameter. - Attribute
Property Optional Singletone - A generic attribute property for switching on/off.
Has 3 states:
None,Some( true ),Some( false ). Defaults toNone. - Attribute
Property Optional Singletone Marker - Default marker for
AttributePropertyOptionalSingletone. Used if no marker is defined as parameter. - Attribute
Property Optional Syn - Property of an attribute which simply wraps one of the standard
syntypes and keeps it optional. - Attribute
Property Optional SynMarker - Default marker for
AttributePropertyOptionalSyn. Used if no marker is defined as parameter. - Attribute
Property Singletone - A generic boolean attribute property which consists of only keyword.
This property can have two states:
true, orfalse. Defaults tofalse. - Attribute
Property Singletone Marker - Default marker for
AttributePropertySingletone. Used if no marker is defined as parameter. - Attribute
Property Syn - Property of an attribute which simply wraps one of the standard
syntypes. - Attribute
Property SynMarker - Default marker for
AttributePropertySyn. Used if no marker is defined as parameter.
Traits§
- Attribute
Property Component - Trait for properties of an attribute component that can be identified by a keyword.