use serde_json::json;
use crate::collection::sorted_values;
use crate::lifecycle::backend_policy::BackendPlan;
use crate::lifecycle::util::{sha256_hex, sorted_model_asset_ids};
use crate::lifecycle::{ModelEntry, ModelError, PairingPlan};
#[cfg(test)]
#[path = "../../tests/lifecycle/service/helpers_tests.rs"]
mod helpers_tests;
pub(super) fn model_id_from_plan(plan: &PairingPlan) -> String {
let ids = sorted_model_asset_ids(&plan.model_asset_ids, plan.projector_asset_id.as_ref());
format!("model-{}", sha256_hex(ids.join("\n").as_bytes()))
}
pub(super) fn runtime_fingerprint(
entry: &ModelEntry,
backend_plan: &BackendPlan,
) -> Result<String, ModelError> {
let runtime = serde_json::to_value(&backend_plan.config)?;
let value = json!({
"modelAssetIds": sorted_values(entry.model_asset_ids.clone()),
"projectorAssetId": entry.projector_asset_id,
"backend": backend_plan.selection.selected,
"runtime": runtime,
});
Ok(sha256_hex(value.to_string().as_bytes()))
}