use sha2::{Digest, Sha256};
use crate::config::AnalysisConfig;
use crate::report::Provenance;
use crate::rules::RULESET_VERSION;
const SCHEMA_VERSION: &str = "0.4.0";
const CHEMATIC_VERSION_REQUIREMENT: &str = "0.12";
fn config_hash(config: &AnalysisConfig) -> String {
let canonical = serde_json::to_vec(config).expect("AnalysisConfig serialization is infallible");
let digest = Sha256::digest(&canonical);
format!("sha256:{digest:x}")
}
pub(crate) fn build(config: &AnalysisConfig) -> Provenance {
Provenance {
schema_version: SCHEMA_VERSION.to_string(),
yomitoki_version: env!("CARGO_PKG_VERSION").to_string(),
chematic_version: CHEMATIC_VERSION_REQUIREMENT.to_string(),
ruleset_version: RULESET_VERSION.to_string(),
model_version: config
.fragment_model
.corpus
.as_deref()
.map(|corpus| corpus.version().to_string()),
config_hash: config_hash(config),
}
}