1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use syn::Attribute;

use crate::Result;

/// Create an instance by parsing a list of attributes.
///
/// This trait is useful when dealing with items such as traits on traits and impl blocks,
/// for which `darling` does not provide dedicated traits.
pub trait FromAttributes: Sized {
    /// Create an instance by parsing a list of attributes.
    ///
    /// By convention, `FromAttributes` implementations should merge item
    /// declarations across attributes, so that the following forms are
    /// equivalent:
    ///
    /// ```rust,ignore
    /// #[derive(Serialize)]
    /// #[serde(rename_all = "camel_case")]
    /// #[serde(borrow)]
    /// pub struct SplitExample {}
    ///
    /// #[derive(Serialize)]
    /// #[serde(borrow, rename_all = "camel_case")]
    /// pub struct JoinedExample {}
    /// ```
    fn from_attributes(attrs: &[Attribute]) -> Result<Self>;
}