1 use syn::DeriveInput; 2 3 use crate::Result; 4 5 /// Creates an instance by parsing an entire proc-macro `derive` input, 6 /// including the, identity, generics, and visibility of the type. 7 /// 8 /// This trait should either be derived or manually implemented by a type 9 /// in the proc macro crate which is directly using `darling`. It is unlikely 10 /// that these implementations will be reusable across crates. 11 pub trait FromDeriveInput: Sized { 12 /// Create an instance from `syn::DeriveInput`, or return an error. from_derive_input(input: &DeriveInput) -> Result<Self>13 fn from_derive_input(input: &DeriveInput) -> Result<Self>; 14 } 15 16 impl FromDeriveInput for () { from_derive_input(_: &DeriveInput) -> Result<Self>17 fn from_derive_input(_: &DeriveInput) -> Result<Self> { 18 Ok(()) 19 } 20 } 21 22 impl FromDeriveInput for DeriveInput { from_derive_input(input: &DeriveInput) -> Result<Self>23 fn from_derive_input(input: &DeriveInput) -> Result<Self> { 24 Ok(input.clone()) 25 } 26 } 27