1use std::collections::BTreeMap;
4use std::sync::Arc;
5
6use chrono::{DateTime, Utc};
7use parking_lot::RwLock;
8use serde::{Deserialize, Serialize};
9
10pub type SharedAcmState = Arc<RwLock<AcmAccounts>>;
11
12#[derive(Debug, Default, Clone, Serialize, Deserialize)]
13pub struct AcmAccounts {
14 pub accounts: BTreeMap<String, AccountState>,
15}
16
17impl AcmAccounts {
18 pub fn new() -> Self {
19 Self::default()
20 }
21}
22
23#[derive(Debug, Default, Clone, Serialize, Deserialize)]
24pub struct AccountState {
25 pub certificates: BTreeMap<String, StoredCertificate>,
27 pub account_config: AccountConfig,
28}
29
30#[derive(Debug, Clone, Default, Serialize, Deserialize)]
31pub struct AccountConfig {
32 pub expiry_events_days_before_expiry: Option<i32>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct StoredCertificate {
37 pub arn: String,
38 pub domain_name: String,
39 pub subject_alternative_names: Vec<String>,
40 pub status: String,
41 pub cert_type: String,
42 pub certificate_pem: Option<String>,
44 pub certificate_chain_pem: Option<String>,
45 pub private_key_pem: Option<String>,
48 pub idempotency_token: Option<String>,
49 pub serial: String,
50 pub subject: String,
51 pub issuer: String,
52 pub key_algorithm: String,
53 pub signature_algorithm: String,
54 pub created_at: DateTime<Utc>,
55 pub issued_at: Option<DateTime<Utc>>,
56 pub imported_at: Option<DateTime<Utc>>,
57 pub revoked_at: Option<DateTime<Utc>>,
58 pub revocation_reason: Option<String>,
59 #[serde(default)]
63 pub failure_reason: Option<String>,
64 pub not_before: DateTime<Utc>,
65 pub not_after: DateTime<Utc>,
66 pub validation_method: Option<String>,
67 pub domain_validation: Vec<DomainValidation>,
68 pub options: CertificateOptions,
69 pub renewal_eligibility: String,
70 pub managed_by: Option<String>,
71 pub certificate_authority_arn: Option<String>,
72 pub tags: BTreeMap<String, String>,
73 pub in_use_by: Vec<String>,
74 #[serde(default)]
79 pub describe_read_count: u32,
80 #[serde(default)]
86 pub renewal_summary: Option<RenewalSummary>,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct RenewalSummary {
91 pub renewal_status: String,
93 pub domain_validation: Vec<DomainValidation>,
99 pub renewal_status_reason: Option<String>,
104 pub updated_at: DateTime<Utc>,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct DomainValidation {
109 pub domain_name: String,
110 pub validation_status: String,
111 pub validation_method: String,
112 pub resource_record_name: Option<String>,
113 pub resource_record_type: Option<String>,
114 pub resource_record_value: Option<String>,
115}
116
117#[derive(Debug, Clone, Default, Serialize, Deserialize)]
118pub struct CertificateOptions {
119 pub certificate_transparency_logging_preference: String,
120 pub export: String,
121}
122
123#[derive(Clone, Serialize, Deserialize)]
126pub struct AcmSnapshot {
127 pub schema_version: u32,
128 #[serde(default)]
129 pub accounts: Option<AcmAccounts>,
130}
131
132pub const ACM_SNAPSHOT_SCHEMA_VERSION: u32 = 1;