chromaframe_sdk/
report.rs1use 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}