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>;
}