11 stable releases

1.4.1 Sep 1, 2022
1.4.0 Mar 11, 2022
1.3.0 Feb 23, 2022
1.1.3 Jan 5, 2022
1.0.1 Oct 19, 2021

#1022 in Encoding

Download history 380/week @ 2024-11-16 421/week @ 2024-11-23 402/week @ 2024-11-30 577/week @ 2024-12-07 560/week @ 2024-12-14 338/week @ 2024-12-21 337/week @ 2024-12-28 248/week @ 2025-01-04 109/week @ 2025-01-11 167/week @ 2025-01-18 103/week @ 2025-01-25 29/week @ 2025-02-01 48/week @ 2025-02-08 52/week @ 2025-02-15 79/week @ 2025-02-22 31/week @ 2025-03-01

218 downloads per month
Used in 4 crates

MIT license

71KB
1.5K SLoC

Namespace aware XML (de)serializer for Rust utilizing Serde

// XML elements can be specified with structs
#[derive(Debug, Serialize, Deserialize)]
pub struct BulkObservable {
    // Required attributes can easily be defined, with the format of {namespace}ns-prefix:element
    #[serde(rename = "{urn:ietf:params:xml:ns:iodef-2.0}iodef:BulkObservableList")]
    pub list: String,

    // Repeated and optional elements can be defined with Vec and Option
    #[serde(rename = "{urn:ietf:params:xml:ns:iodef-2.0}iodef:AdditionalData", default, skip_serializing_if="Vec::is_empty")]
    pub additional_data: Vec<ExtensionType>,
    #[serde(rename = "{urn:ietf:params:xml:ns:iodef-2.0}iodef:BulkObservableFormat", default, skip_serializing_if="Option::is_none")]
    pub format: Option<BulkObservableFormat>,

    // Element attributes can be specified with the $attr: prefix
    #[serde(rename = "$attr:type")]
    pub bulk_type: BulkObservableType,
    #[serde(rename = "$attr:ext-type", default, skip_serializing_if="Option::is_none")]
    pub bulk_ext_type: Option<String>,

    // Textual element content can be set with the special name $value
    #[serde(rename = "$value")]
    pub value: f64,
}

// Enumerated values can also be defined
#[derive(Debug, Serialize, Deserialize)]
pub enum ConfidenceRating {
    #[serde(rename = "low")]
    Low,
    #[serde(rename = "medium")]
    Medium,
    #[serde(rename = "high")]
    High,
    #[serde(rename = "numeric")]
    Numeric,
    #[serde(rename = "unknown")]
    Unknown
}

// As can enumerated objects
#[derive(Debug, Serialize, Deserialize)]
pub enum IndicatorExpressionInner {
    #[serde(rename = "{urn:ietf:params:xml:ns:iodef-2.0}IndicatorExpression")]
    IndicatorExpression(IndicatorExpression),
    #[serde(rename = "{urn:ietf:params:xml:ns:iodef-2.0}Observable")]
    Observable(Observable),
    #[serde(rename = "{urn:ietf:params:xml:ns:iodef-2.0}ObservableReference")]
    ObservableReference(ObservableReference),
    #[serde(rename = "{urn:ietf:params:xml:ns:iodef-2.0}IndicatorReference")]
    IndicatorReference(IndicatorReference),
    #[serde(rename = "{urn:ietf:params:xml:ns:iodef-2.0}AdditionalData")]
    AdditionalData(ExtensionType),
}

Dependencies

~3–12MB
~127K SLoC