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
use crate::meta::PunctuatedNestedMeta; use syn::{parse_quote, Attribute, Meta, MetaList}; thread_local! { static EMPTY_META_NESTED: PunctuatedNestedMeta = PunctuatedNestedMeta::new(); } pub trait AttributeExt { fn from_meta<M>(meta: M) -> Self where M: IntoAttribute; } impl AttributeExt for Attribute { fn from_meta<M>(meta: M) -> Self where M: IntoAttribute, { meta.into_attribute() } } pub trait IntoAttribute { fn into_attribute(self) -> Attribute; } impl IntoAttribute for Meta { fn into_attribute(self) -> Attribute { parse_quote!( #[ self ] ) } } impl IntoAttribute for MetaList { fn into_attribute(self) -> Attribute { Meta::List(self).into_attribute() } }