use super::insert_field;
use crate::provenance::{ExecutionProvenance, sign_provenance};
use serde_json::{Map, Value, json};
pub fn insert_provenance_fields(obj: &mut Map<String, Value>, provenance: &ExecutionProvenance) {
for (key, value) in [
(
"__ct_provenance_id",
Some(provenance.provenance_id.as_str()),
),
("__ct_origin", Some(provenance.identity.origin.as_str())),
("__ct_worker_id", provenance.identity.worker_id.as_deref()),
("__ct_task_id", provenance.task_id.as_deref()),
("__ct_run_id", provenance.run_id.as_deref()),
("__ct_attempt_id", provenance.attempt_id.as_deref()),
("__ct_tenant_id", provenance.identity.tenant_id.as_deref()),
(
"__ct_agent_identity_id",
provenance.identity.agent_identity_id.as_deref(),
),
("__ct_key_id", provenance.identity.key_id.as_deref()),
] {
insert_provenance_field(obj, key, value);
}
if let Some(signature) = sign_provenance(provenance) {
obj.entry("__ct_signature".to_string())
.or_insert_with(|| json!(signature));
}
}
pub fn insert_provenance_field(obj: &mut Map<String, Value>, key: &str, value: Option<&str>) {
insert_field(obj, key, value);
}