use crate::contracts::{RecallOutcomeKind, RecallReceipt, SuppliedClaim, SuppliedContract};
use saya_agent::{AgentEvent, KnowledgeOutcome, SuppliedClaimDto, SuppliedContractDto};
pub(crate) fn knowledge_supplied_event(receipt: &RecallReceipt) -> AgentEvent {
match receipt.kind {
RecallOutcomeKind::ConfiguredOff => {
AgentEvent::knowledge_supplied(KnowledgeOutcome::Off, Vec::new(), 0)
}
RecallOutcomeKind::PrivacyGateClosed => {
AgentEvent::knowledge_supplied(KnowledgeOutcome::Skipped, Vec::new(), 0)
}
RecallOutcomeKind::Ran { store_unavailable } => AgentEvent::knowledge_supplied(
KnowledgeOutcome::Ran { store_unavailable },
receipt.supplied.iter().map(map_supplied_contract).collect(),
receipt.dropped_by_bounds,
),
}
}
fn map_supplied_contract(contract: &SuppliedContract) -> SuppliedContractDto {
SuppliedContractDto {
profile: contract.profile.clone(),
object: contract.object.clone(),
schema_state: contract.schema_state.to_string(),
claims: contract.claims.iter().map(map_supplied_claim).collect(),
}
}
fn map_supplied_claim(claim: &SuppliedClaim) -> SuppliedClaimDto {
SuppliedClaimDto {
claim_id: claim.claim_id.clone(),
kind: claim.kind.to_string(),
value: claim.value.clone(),
column: claim.column.clone(),
status: claim.status,
}
}