1 use syn::Generics; 2 3 use crate::Result; 4 5 /// Creates an instance by parsing an entire generics declaration, including the 6 /// `where` clause. 7 pub trait FromGenerics: Sized { from_generics(generics: &Generics) -> Result<Self>8 fn from_generics(generics: &Generics) -> Result<Self>; 9 } 10 11 impl FromGenerics for () { from_generics(_generics: &Generics) -> Result<Self>12 fn from_generics(_generics: &Generics) -> Result<Self> { 13 Ok(()) 14 } 15 } 16 17 impl FromGenerics for Generics { from_generics(generics: &Generics) -> Result<Self>18 fn from_generics(generics: &Generics) -> Result<Self> { 19 Ok(generics.clone()) 20 } 21 } 22 23 impl<T: FromGenerics> FromGenerics for Result<T> { from_generics(generics: &Generics) -> Result<Self>24 fn from_generics(generics: &Generics) -> Result<Self> { 25 Ok(FromGenerics::from_generics(generics)) 26 } 27 } 28