1use serde::Serialize;
4
5pub const TRUTH_PROJECTION_VERSION: u32 = 1;
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
13#[serde(rename_all = "snake_case")]
14pub enum PublicationState {
15 Candidate,
16 Reviewed,
17 Active,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
22#[serde(rename_all = "snake_case")]
23pub enum ValidityState {
24 Current,
25 Superseded,
26 Contradicted,
27 Stale,
28 Expired,
29 Unknown,
30}
31
32#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
34#[serde(rename_all = "snake_case")]
35pub enum RetentionState {
36 Live,
37 Archived,
38 Deleted,
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
43#[serde(rename_all = "snake_case")]
44pub enum Visibility {
45 Visible,
46 Suppressed,
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
51pub struct Lifecycle {
52 pub publication: PublicationState,
53 pub validity: ValidityState,
54 pub retention: RetentionState,
55 pub visibility: Visibility,
56}
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
60#[serde(rename_all = "snake_case")]
61pub enum ClaimSource {
62 Memory,
63 UserContextClaim,
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
68#[serde(rename_all = "snake_case")]
69pub enum EvidenceKind {
70 CapturedEvent,
72 SourceRef,
74 SourceTrustClass,
76}
77
78#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize)]
81#[serde(rename_all = "snake_case")]
82pub enum EvidenceTrust {
83 Untrusted,
84 ModelGenerated,
85 Verified,
86}
87
88#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
90pub struct EvidenceView {
91 pub evidence_ref: String,
93 pub kind: EvidenceKind,
94 pub source_ref: String,
97 pub observed_at_epoch: Option<i64>,
98 pub trust: EvidenceTrust,
99}
100
101#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
103pub struct ClaimView {
104 pub canonical_ref: String,
106 pub source: ClaimSource,
107 pub subject_key: String,
109 pub statement: String,
110 pub scope: String,
112 pub branch: Option<String>,
113 pub lifecycle: Lifecycle,
114 pub valid_from_epoch: Option<i64>,
115 pub valid_to_epoch: Option<i64>,
116 pub created_at_epoch: i64,
117 pub updated_at_epoch: i64,
118 pub evidence: Vec<EvidenceView>,
119}
120
121#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
123#[serde(rename_all = "snake_case")]
124pub enum ClaimRelationKind {
125 Supports,
126 Refutes,
127 Supersedes,
128 DerivedFrom,
129 AppliesTo,
130}
131
132#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
135pub struct RelationView {
136 pub relation_ref: String,
138 pub kind: ClaimRelationKind,
139 pub from_ref: String,
140 pub to_ref: String,
141 pub created_at_epoch: i64,
142 pub valid_from_epoch: Option<i64>,
143 pub valid_to_epoch: Option<i64>,
144}
145
146#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
148#[serde(rename_all = "snake_case")]
149pub enum TruthSelectionReason {
150 OnlySurvivingClaim,
152 ExplicitSupersedes,
154 VerifiedEvidencePreferred,
156 MostRecent,
158 UnresolvedConflict,
160 InsufficientEvidence,
162}
163
164#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
167pub struct CurrentTruthView {
168 pub subject_key: String,
169 pub claim: Option<ClaimView>,
171 pub validity: ValidityState,
172 pub evidence: Vec<EvidenceView>,
173 pub supporting_relations: Vec<RelationView>,
174 pub contradicting_relations: Vec<RelationView>,
175 pub rejected: Vec<String>,
177 pub conflicting_claims: Vec<ClaimView>,
179 pub selected_reason: TruthSelectionReason,
180}
181
182#[derive(Debug, Clone, Default)]
184pub struct TruthQuery {
185 pub project: String,
186 pub branch: Option<String>,
187 pub as_of_epoch: Option<i64>,
189 pub subject_key: Option<String>,
191}
192
193#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
195pub struct CurrentTruthProjection {
196 pub projection_version: u32,
197 pub project: String,
198 pub branch: Option<String>,
199 pub as_of_epoch: Option<i64>,
200 pub truths: Vec<CurrentTruthView>,
201}