1 use syn::{self, Variant}; 2 3 use Result; 4 5 /// Creates an instance from a specified `syn::Variant`. 6 pub trait FromVariant: Sized { 7 /// Create an instance from `syn::Variant`, or return an error. from_variant(variant: &Variant) -> Result<Self>8 fn from_variant(variant: &Variant) -> Result<Self>; 9 } 10 11 impl FromVariant for () { from_variant(_: &Variant) -> Result<Self>12 fn from_variant(_: &Variant) -> Result<Self> { 13 Ok(()) 14 } 15 } 16 17 impl FromVariant for Variant { from_variant(variant: &Variant) -> Result<Self>18 fn from_variant(variant: &Variant) -> Result<Self> { 19 Ok(variant.clone()) 20 } 21 } 22 23 impl FromVariant for syn::Ident { from_variant(variant: &Variant) -> Result<Self>24 fn from_variant(variant: &Variant) -> Result<Self> { 25 Ok(variant.ident.clone()) 26 } 27 } 28 29 impl FromVariant for Vec<syn::Attribute> { from_variant(variant: &Variant) -> Result<Self>30 fn from_variant(variant: &Variant) -> Result<Self> { 31 Ok(variant.attrs.clone()) 32 } 33 } 34