use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct CertificateAuthority {
#[serde(default = "default_generate")]
pub generate_certificate_authority: bool,
#[serde(default = "default_validity_days")]
pub validity_days: u32,
#[serde(default = "default_renewal_days")]
pub renewal_days: u32,
}
#[must_use]
const fn default_generate() -> bool {
true
}
#[must_use]
const fn default_validity_days() -> u32 {
365
}
#[must_use]
const fn default_renewal_days() -> u32 {
30
}
impl Default for CertificateAuthority {
fn default() -> Self {
Self {
generate_certificate_authority: default_generate(),
validity_days: default_validity_days(),
renewal_days: default_renewal_days(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, PartialEq, Default)]
#[serde(rename_all = "camelCase")]
pub struct CertificateAuthorityStatus {
pub not_after: String,
pub generated: bool,
#[serde(default)]
pub cert_generation: u64,
#[serde(default)]
pub key_generation: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rotation_phase: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub trust_anchors: Option<usize>,
}
#[cfg(test)]
mod tests {
use super::*;
use assert2::assert;
#[test]
fn defaults_match_strimzi() {
let d = CertificateAuthority::default();
assert!(d.generate_certificate_authority);
assert!(d.validity_days == 365);
assert!(d.renewal_days == 30);
}
#[test]
fn deserialize_empty_object_uses_defaults() {
let v: CertificateAuthority = serde_json::from_value(serde_json::json!({})).expect("parse");
assert!(v == CertificateAuthority::default());
}
#[test]
fn byo_round_trips() {
let v: CertificateAuthority = serde_json::from_value(serde_json::json!({
"generateCertificateAuthority": false,
"validityDays": 90,
"renewalDays": 7,
}))
.expect("parse");
assert!(!v.generate_certificate_authority);
assert!(v.validity_days == 90);
assert!(v.renewal_days == 7);
}
}