```rust // XML elements can be specified with structs
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
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
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), } ```