use syn::Variant; use crate::Result; /// Creates an instance from a specified `syn::Variant`. pub trait FromVariant: Sized { /// Create an instance from `syn::Variant`, or return an error. fn from_variant(variant: &Variant) -> Result; } impl FromVariant for () { fn from_variant(_: &Variant) -> Result { Ok(()) } } impl FromVariant for Variant { fn from_variant(variant: &Variant) -> Result { Ok(variant.clone()) } } impl FromVariant for syn::Ident { fn from_variant(variant: &Variant) -> Result { Ok(variant.ident.clone()) } } impl FromVariant for Vec { fn from_variant(variant: &Variant) -> Result { Ok(variant.attrs.clone()) } }