stix_rs/observables/
x509_certificate.rs1use 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}