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