Skip to main content

chromaframe_sdk/
report.rs

1use crate::evidence::{agent_brief, contains_prohibited_claim, evidence_cards};
2use crate::image::MeasurementReport;
3use crate::types::{AgentBrief, EvidenceCard};
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use thiserror::Error;
7
8#[derive(Debug, Error)]
9pub enum ReportError {
10    #[error("report text contains a prohibited claim")]
11    ProhibitedClaim,
12    #[error("report serialization failed")]
13    Serialization,
14}
15
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
17pub struct SdkReport {
18    pub measurement: MeasurementReport,
19    pub evidence_cards: Vec<EvidenceCard>,
20    pub agent_brief: AgentBrief,
21}
22
23pub fn build_report(measurement: MeasurementReport) -> Result<SdkReport, ReportError> {
24    let evidence_cards = evidence_cards(&measurement);
25    let agent_brief = agent_brief(&measurement);
26    let report = SdkReport {
27        measurement,
28        evidence_cards,
29        agent_brief,
30    };
31    let serialized = serde_json::to_string(&report).map_err(|_| ReportError::Serialization)?;
32    if contains_prohibited_claim(&serialized) {
33        return Err(ReportError::ProhibitedClaim);
34    }
35    Ok(report)
36}