Skip to main content

stix_rs/observables/
x509_certificate.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
5#[serde(rename_all = "snake_case")]
6pub struct X509Certificate {
7    pub subject: Option<String>,
8    pub issuer: Option<String>,
9    pub valid_from: Option<DateTime<Utc>>,
10    pub valid_until: Option<DateTime<Utc>>,
11    #[serde(flatten)]
12    pub custom_properties: std::collections::HashMap<String, serde_json::Value>,
13}
14
15impl X509Certificate {
16    pub fn builder() -> X509CertificateBuilder {
17        X509CertificateBuilder::default()
18    }
19}
20
21#[derive(Debug, Default)]
22pub struct X509CertificateBuilder {
23    subject: Option<String>,
24    issuer: Option<String>,
25    valid_from: Option<DateTime<Utc>>,
26    valid_until: Option<DateTime<Utc>>,
27    custom_properties: std::collections::HashMap<String, serde_json::Value>,
28}
29
30impl X509CertificateBuilder {
31    pub fn subject(mut self, s: impl Into<String>) -> Self {
32        self.subject = Some(s.into());
33        self
34    }
35    pub fn issuer(mut self, i: impl Into<String>) -> Self {
36        self.issuer = Some(i.into());
37        self
38    }
39    pub fn valid_from(mut self, d: DateTime<Utc>) -> Self {
40        self.valid_from = Some(d);
41        self
42    }
43    pub fn valid_until(mut self, d: DateTime<Utc>) -> Self {
44        self.valid_until = Some(d);
45        self
46    }
47    pub fn property(mut self, k: impl Into<String>, v: impl Into<serde_json::Value>) -> Self {
48        self.custom_properties.insert(k.into(), v.into());
49        self
50    }
51    pub fn build(self) -> X509Certificate {
52        X509Certificate {
53            subject: self.subject,
54            issuer: self.issuer,
55            valid_from: self.valid_from,
56            valid_until: self.valid_until,
57            custom_properties: self.custom_properties,
58        }
59    }
60}
61
62impl From<X509Certificate> for crate::StixObjectEnum {
63    fn from(x: X509Certificate) -> Self {
64        crate::StixObjectEnum::X509Certificate(x)
65    }
66}