runx_contracts/
verification.rs1use serde::{Deserialize, Serialize};
3
4use crate::Reference;
5use crate::schema::{IsoDateTime, NonEmptyString, RunxSchema};
6
7pub const VERIFICATION_SCHEMA: &str = "runx.verification.v1";
8
9#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
10pub enum VerificationSchema {
11 #[serde(rename = "runx.verification.v1")]
12 V1,
13}
14
15#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
16#[serde(rename_all = "snake_case")]
17pub enum VerificationStatus {
18 Passed,
19 Failed,
20 Pending,
21 NotApplicable,
22 Missing,
23}
24
25#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
26#[serde(deny_unknown_fields)]
27pub struct VerificationCheck {
28 pub check_id: NonEmptyString,
29 pub criterion_ids: Vec<NonEmptyString>,
30 pub status: VerificationStatus,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub summary: Option<NonEmptyString>,
33 #[serde(default)]
34 pub checked_refs: Vec<Reference>,
35 pub evidence_refs: Vec<Reference>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub verified_at: Option<IsoDateTime>,
40}
41
42#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
43#[serde(deny_unknown_fields)]
44#[runx_schema(id = "runx.verification.v1")]
45pub struct Verification {
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub schema: Option<VerificationSchema>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub verification_id: Option<NonEmptyString>,
50 pub status: VerificationStatus,
51 pub checks: Vec<VerificationCheck>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub verified_at: Option<IsoDateTime>,
55 pub evidence_refs: Vec<Reference>,
58}
59
60#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
61#[serde(deny_unknown_fields)]
62pub struct ReceiptVerificationSummary {
63 pub signature_valid: bool,
64 pub content_address_valid: bool,
65 pub hash_commitments_valid: bool,
66 pub authority_attenuation_valid: bool,
67 pub criteria_bound: bool,
68 pub redaction_valid: bool,
69 pub external_attestations_present: bool,
70}