1use syn::Attribute;
2
3use crate::Result;
4
5/// Create an instance by parsing a list of attributes.
6///
7/// This trait is useful when dealing with items such as traits on traits and impl blocks,
8/// for which `darling` does not provide dedicated traits.
9pub trait FromAttributes: Sized {
10 /// Create an instance by parsing a list of attributes.
11 ///
12 /// By convention, `FromAttributes` implementations should merge item
13 /// declarations across attributes, so that the following forms are
14 /// equivalent:
15 ///
16 /// ```rust,ignore
17 /// #[derive(Serialize)]
18 /// #[serde(rename_all = "camel_case")]
19 /// #[serde(borrow)]
20 /// pub struct SplitExample {}
21 ///
22 /// #[derive(Serialize)]
23 /// #[serde(borrow, rename_all = "camel_case")]
24 /// pub struct JoinedExample {}
25 /// ```
26 fn from_attributes(attrs: &[Attribute]) -> Result<Self>;
27}
28