use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ResearchCategory {
MachineExtraction,
AnalystAssertion,
Interpretation,
Hypothesis,
Theory,
Annotation,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ClaimRelationKind {
AlternativeTo,
Contradicts,
Disputes,
Refines,
Supersedes,
Supports,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ResearchAuthority {
pub project_uuid: Uuid,
pub community_uuid: Option<Uuid>,
pub context_uuid: Uuid,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ResearchSubjectKind {
Node,
Edge,
Assertion,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ResearchDecisionKind {
Integrate,
Promote,
Revoke,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ResearchClaimRecord {
pub assertion_uuid: Uuid,
pub conceptual_uuid: Uuid,
pub category: ResearchCategory,
pub creator_uuid: Uuid,
pub run_uuid: Option<Uuid>,
pub origin_branch_uuid: Option<Uuid>,
pub origin_version_uuid: Option<Uuid>,
pub provenance_uuid: Uuid,
pub recorded_at: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ClaimRelationRecord {
pub relation_uuid: Uuid,
pub source_assertion_uuid: Uuid,
pub target_assertion_uuid: Uuid,
pub kind: ClaimRelationKind,
pub creator_uuid: Uuid,
pub provenance_uuid: Uuid,
pub recorded_at: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ResearchDecisionRecord {
pub sequence: u64,
pub decision_uuid: Uuid,
pub operation_uuid: Uuid,
pub request_sha256: [u8; 32],
pub authority: ResearchAuthority,
pub subject_kind: ResearchSubjectKind,
pub subject_uuid: Uuid,
pub kind: ResearchDecisionKind,
pub creator_uuid: Uuid,
pub source_version_uuid: Option<Uuid>,
pub recorded_at: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ResearchSuppressionRecord {
pub suppression_uuid: Uuid,
pub assertion_uuid: Uuid,
pub context_uuid: Uuid,
pub creator_uuid: Uuid,
pub provenance_uuid: Uuid,
pub recorded_at: i64,
}