#[custom_properties]Expand description
Make a container for custom properties on a STIX object.
The STIX specification allows namespaced custom properties, which should be named as
x_$NAMESPACE_$PROPERTY_NAME. This macro handles the renaming of all the struct’s fields
for deserialization.
§Example
ⓘ
use std::collections::BTreeSet;
use serde::Deserialize;
use stix::CommonProperties;
// These are the additional properties MITRE defines. This struct is public so that
// other STIX crates can include it as a member in their final `AttackPattern` struct.
#[stix::custom_properties(namespace = "mitre")]
#[derive(Default, Deserialize)]
#[serde(default)]
pub struct MitreMalware {
// This will deserialize from `x_mitre_aliases`
pub aliases: BTreeSet<String>,
pub platforms: BTreeSet<String>,
}
// This is the combination of the standards-defined properties and the MITRE properties.
// This is exposed as `AttackPattern` so that `attck::AttackPattern` is immediately usable
// for working with STIX data.
#[derive(Deserialize, stix::TypedObject)]
pub struct Malware {
// Both declarations are marked flatten here so they merge.
#[serde(flatten)]
pub base: stix::Malware,
#[serde(flatten)]
pub mitre: MitreMalware,
}