use crate::{cache::CacheCollectionCompleteness, cache_file::JsonCacheReport};
use serde::{Deserialize as SerdeDeserialize, Serialize};
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct SnapshotEnvelope<Metadata, Data> {
pub schema_version: u32,
pub network: String,
pub source_endpoint: String,
pub fetched_at: String,
pub fetched_by: String,
pub domain: String,
pub entity: String,
pub collection: String,
pub scope: String,
#[serde(flatten)]
pub metadata: Metadata,
pub completeness: CacheCollectionCompleteness,
#[serde(flatten)]
pub data: Data,
}
impl<Metadata, Data> JsonCacheReport for SnapshotEnvelope<Metadata, Data> {
fn schema_version(&self) -> u32 {
self.schema_version
}
fn network(&self) -> &str {
&self.network
}
}
pub trait SnapshotReport: JsonCacheReport {
fn completeness(&self) -> &CacheCollectionCompleteness;
fn snapshot_domain(&self) -> &str;
fn snapshot_entity(&self) -> &str;
fn snapshot_collection(&self) -> &str;
fn snapshot_scope(&self) -> &str;
}
impl<Metadata, Data> SnapshotReport for SnapshotEnvelope<Metadata, Data> {
fn completeness(&self) -> &CacheCollectionCompleteness {
&self.completeness
}
fn snapshot_domain(&self) -> &str {
&self.domain
}
fn snapshot_entity(&self) -> &str {
&self.entity
}
fn snapshot_collection(&self) -> &str {
&self.collection
}
fn snapshot_scope(&self) -> &str {
&self.scope
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct SnapshotIdentityMismatch {
pub field: &'static str,
pub expected: String,
pub actual: String,
}
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize)]
pub struct SnapshotHeader<Metadata> {
pub schema_version: u32,
pub network: String,
pub domain: String,
pub entity: String,
pub collection: String,
pub scope: String,
#[serde(flatten)]
pub metadata: Metadata,
}
impl<Metadata> JsonCacheReport for SnapshotHeader<Metadata> {
fn schema_version(&self) -> u32 {
self.schema_version
}
fn network(&self) -> &str {
&self.network
}
}