use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct NnsRegistryInventoryProvenance {
pub network: String,
pub registry_canister_id: String,
pub registry_version: u64,
pub fetched_at: String,
pub source_endpoint: String,
pub fetched_by: String,
}
#[cfg(feature = "nns-host")]
pub(super) const NNS_REGISTRY_VERSION_REPORT_SCHEMA_VERSION: u32 = 1;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct NnsRegistryVersionRequest {
pub network: String,
pub source_endpoint: String,
pub now_unix_secs: u64,
}
impl NnsRegistryVersionRequest {
#[must_use]
pub fn new(
network: impl Into<String>,
source_endpoint: impl Into<String>,
now_unix_secs: u64,
) -> Self {
Self {
network: network.into(),
source_endpoint: source_endpoint.into(),
now_unix_secs,
}
}
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct NnsRegistryVersionReport {
pub schema_version: u32,
#[serde(flatten)]
pub provenance: NnsRegistryInventoryProvenance,
pub certification: NnsRegistryCertification,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct NnsRegistryCertification {
pub certificate_verified: bool,
pub certificate_time_nanos: u64,
pub root_key_digest: String,
pub certificate_hex: String,
pub hash_tree_hex: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct NnsRegistryVersionData {
#[serde(flatten)]
pub provenance: NnsRegistryInventoryProvenance,
pub certification: NnsRegistryCertification,
}
impl NnsRegistryCertification {
#[must_use]
pub const fn certificate_bytes(&self) -> usize {
self.certificate_hex.len() / 2
}
#[must_use]
pub const fn hash_tree_bytes(&self) -> usize {
self.hash_tree_hex.len() / 2
}
}