#![forbid(unsafe_code)]
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct Manifest {
pub corpus: String,
pub corpus_hash: String,
pub revision: String,
pub ryg_rans_revision: String,
pub dsfb_revision: String,
pub kernel: String,
pub mount_config: String,
pub cpu_features: String,
pub command: String,
pub representation_distribution: BTreeMap<String, u64>,
pub logical_bytes: u64,
pub physical_reachable_bytes: u64,
pub total_backing_bytes: u64,
pub metadata_bytes: u64,
pub model_bytes: u64,
pub descriptor_bytes: u64,
pub residual_bytes: u64,
pub dedup_savings: u64,
pub encode_mbps: f64,
pub materialize_mbps: f64,
pub cold_read_mbps: f64,
pub warm_read_mbps: f64,
}
impl Manifest {
pub fn to_json(&self) -> String {
serde_json::to_string_pretty(self).unwrap_or_else(|_| "{}".into())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn manifest_json_roundtrip() {
let m = Manifest {
corpus: "corpus.case".into(),
corpus_hash: "deadbeef".into(),
logical_bytes: 1_000_000,
..Default::default()
};
let back: Manifest = serde_json::from_str(&m.to_json()).unwrap();
assert_eq!(back, m);
}
}