1use std::collections::BTreeSet;
2
3use chrono::{DateTime, Utc};
4use serde::Deserialize;
5
6use crate::CommonProperties;
7
8#[derive(Deserialize, stix_derive::TypedObject)]
9#[typed_object(core)]
10pub struct Campaign {
11 #[serde(flatten)]
12 common: CommonProperties,
13 pub name: String,
14 #[serde(default)]
15 pub description: Option<String>,
16 #[serde(default)]
17 pub aliases: BTreeSet<String>,
18 #[serde(default)]
19 pub first_seen: Option<DateTime<Utc>>,
20 #[serde(default)]
21 pub last_seen: Option<DateTime<Utc>>,
22 #[serde(default)]
23 pub objective: Option<String>,
24}
25
26impl AsRef<CommonProperties> for Campaign {
27 fn as_ref(&self) -> &CommonProperties {
28 &self.common
29 }
30}