use serde::Serialize;
pub const TRUTH_PROJECTION_VERSION: u32 = 1;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum PublicationState {
Candidate,
Reviewed,
Active,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum ValidityState {
Current,
Superseded,
Contradicted,
Stale,
Expired,
Unknown,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum RetentionState {
Live,
Archived,
Deleted,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum Visibility {
Visible,
Suppressed,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub struct Lifecycle {
pub publication: PublicationState,
pub validity: ValidityState,
pub retention: RetentionState,
pub visibility: Visibility,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum ClaimSource {
Memory,
UserContextClaim,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum EvidenceKind {
CapturedEvent,
SourceRef,
SourceTrustClass,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum EvidenceTrust {
Untrusted,
ModelGenerated,
Verified,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct EvidenceView {
pub evidence_ref: String,
pub kind: EvidenceKind,
pub source_ref: String,
pub observed_at_epoch: Option<i64>,
pub trust: EvidenceTrust,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct ClaimView {
pub canonical_ref: String,
pub source: ClaimSource,
pub subject_key: String,
pub statement: String,
pub scope: String,
pub branch: Option<String>,
pub lifecycle: Lifecycle,
pub valid_from_epoch: Option<i64>,
pub valid_to_epoch: Option<i64>,
pub created_at_epoch: i64,
pub updated_at_epoch: i64,
pub evidence: Vec<EvidenceView>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum ClaimRelationKind {
Supports,
Refutes,
Supersedes,
DerivedFrom,
AppliesTo,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct RelationView {
pub relation_ref: String,
pub kind: ClaimRelationKind,
pub from_ref: String,
pub to_ref: String,
pub created_at_epoch: i64,
pub valid_from_epoch: Option<i64>,
pub valid_to_epoch: Option<i64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum TruthSelectionReason {
OnlySurvivingClaim,
ExplicitSupersedes,
VerifiedEvidencePreferred,
MostRecent,
UnresolvedConflict,
InsufficientEvidence,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct CurrentTruthView {
pub subject_key: String,
pub claim: Option<ClaimView>,
pub validity: ValidityState,
pub evidence: Vec<EvidenceView>,
pub supporting_relations: Vec<RelationView>,
pub contradicting_relations: Vec<RelationView>,
pub rejected: Vec<String>,
pub conflicting_claims: Vec<ClaimView>,
pub selected_reason: TruthSelectionReason,
}
#[derive(Debug, Clone, Default)]
pub struct TruthQuery {
pub project: String,
pub branch: Option<String>,
pub as_of_epoch: Option<i64>,
pub subject_key: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct CurrentTruthProjection {
pub projection_version: u32,
pub project: String,
pub branch: Option<String>,
pub as_of_epoch: Option<i64>,
pub truths: Vec<CurrentTruthView>,
}