1use syn::DeriveInput;
2
3use 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.
11pub trait FromDeriveInput: Sized {
12 /// Create an instance from `syn::DeriveInput`, or return an error.
13 fn from_derive_input(input: &DeriveInput) -> Result<Self>;
14}
15
16impl FromDeriveInput for () {
17 fn from_derive_input(_: &DeriveInput) -> Result<Self> {
18 Ok(())
19 }
20}
21
22impl FromDeriveInput for DeriveInput {
23 fn from_derive_input(input: &DeriveInput) -> Result<Self> {
24 Ok(input.clone())
25 }
26}
27