use serde::{Deserialize, Serialize};
use crate::model::{Claim, EvidenceRef, EvidenceSourceType, RemediationEvent};
use crate::session::CoverageSchema;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EvidenceEvent {
pub id: String,
pub session_id: String,
pub claim_id: String,
pub source_type: EvidenceSourceType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
pub source: EvidenceRef,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum Event {
SessionOpened {
session_id: String,
coverage_schema: CoverageSchema,
},
ClaimAdded {
claim: Box<Claim>,
#[serde(default, skip_serializing_if = "Option::is_none")]
requirement: Option<crate::model::RequirementMeta>,
},
EvidenceAdded { evidence: EvidenceEvent },
Remediated { remediation: RemediationEvent },
}
impl Event {
pub fn session_id(&self) -> &str {
match self {
Event::SessionOpened { session_id, .. } => session_id,
Event::ClaimAdded { claim, .. } => &claim.session_id,
Event::EvidenceAdded { evidence } => &evidence.session_id,
Event::Remediated { remediation } => &remediation.session_id,
}
}
}