Skip to main content

lean_ctx_protocol/
evidence.rs

1use serde::{Deserialize, Serialize};
2
3/// Typed evidence reference (not just a string).
4#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
5pub struct EvidenceRefV1 {
6    pub kind: EvidenceKind,
7    pub uri: String,
8    pub digest: String,
9    pub signature_status: SignatureStatus,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13pub enum EvidenceKind {
14    ProviderReceipt,
15    RuntimeLog,
16    SignedBatch,
17    QualityMeasurement,
18    ExperimentOutcome,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
22pub enum SignatureStatus {
23    Verified,
24    Unverified,
25    NotSigned,
26}
27
28#[cfg(test)]
29mod tests {
30    use crate::{EvidenceKind, EvidenceRefV1, SignatureStatus};
31
32    #[test]
33    fn serialization_round_trip() {
34        let evidence = EvidenceRefV1 {
35            kind: EvidenceKind::ProviderReceipt,
36            uri: "urn:receipt:1".to_owned(),
37            digest: "sha256:abc".to_owned(),
38            signature_status: SignatureStatus::Verified,
39        };
40        let json = serde_json::to_string(&evidence).expect("evidence should serialize");
41        let decoded = serde_json::from_str(&json).expect("evidence should deserialize");
42        assert_eq!(evidence, decoded);
43    }
44}