certstreamrs 0.1.2

A library for streaming Certificate Transparency Log events from the certstream service
Documentation
use serde::{Deserialize, Serialize};

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CertstreamMessage {
    pub data: Data,
    #[serde(rename = "message_type")]
    pub message_type: String,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Data {
    #[serde(rename = "cert_index")]
    pub cert_index: i64,
    #[serde(rename = "cert_link")]
    pub cert_link: String,
    #[serde(rename = "leaf_cert")]
    pub leaf_cert: LeafCert,
    pub seen: f64,
    pub source: Source,
    #[serde(rename = "update_type")]
    pub update_type: String,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LeafCert {
    #[serde(rename = "all_domains")]
    pub all_domains: Vec<String>,
    pub extensions: Extensions,
    pub fingerprint: String,
    pub issuer: CertificateAttributes,
    #[serde(rename = "not_after")]
    pub not_after: i64,
    #[serde(rename = "not_before")]
    pub not_before: i64,
    #[serde(rename = "serial_number")]
    pub serial_number: String,
    #[serde(rename = "signature_algorithm")]
    pub signature_algorithm: String,
    pub subject: CertificateAttributes,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Extensions {
    pub authority_info_access: Option<String>,
    pub authority_key_identifier: Option<String>,
    pub basic_constraints: Option<String>,
    pub certificate_policies: Option<String>,
    pub ctl_signed_certificate_timestamp: Option<String>,
    pub extended_key_usage: Option<String>,
    pub key_usage: Option<String>,
    pub subject_alt_name: Option<String>,
    pub subject_key_identifier: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CertificateAttributes {
    #[serde(rename = "C")]
    pub country_name: Option<String>,
    #[serde(rename = "CN")]
    pub common_name: Option<String>,
    #[serde(rename = "L")]
    pub locality: Option<String>,
    #[serde(rename = "O")]
    pub organization: Option<String>,
    #[serde(rename = "OU")]
    pub organizational_unit: Option<String>,
    #[serde(rename = "ST")]
    pub state_or_provice_name: Option<String>,
    pub aggregated: Option<String>,
    pub email_address: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Source {
    pub name: String,
    pub url: String,
}