Skip to main content

oneiros_model/protocol/
event_ops.rs

1use serde::{Deserialize, Serialize};
2
3use crate::*;
4
5#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
6#[serde(untagged)]
7pub enum ImportEvent {
8    Valid {
9        id: EventId,
10        source: Source,
11        timestamp: String,
12        data: serde_json::Value,
13    },
14    Unsourced {
15        id: EventId,
16        timestamp: String,
17        data: serde_json::Value,
18    },
19}
20
21impl ImportEvent {
22    pub fn with_source(self, source: Source) -> Self {
23        match self {
24            ImportEvent::Unsourced {
25                id,
26                timestamp,
27                data,
28            } => ImportEvent::Valid {
29                id,
30                source,
31                timestamp,
32                data,
33            },
34            valid @ ImportEvent::Valid { .. } => valid,
35        }
36    }
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
40pub struct ImportResponse {
41    pub imported: usize,
42    pub replayed: usize,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
46pub struct ReplayResponse {
47    pub replayed: usize,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
51pub struct SelectEventById {
52    pub id: EventId,
53}
54
55// ── Request types ──────────────────────────────────────────────────
56
57#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
58pub struct ImportEventsRequest {
59    pub events: Vec<ImportEvent>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
63pub struct ReplayEventsRequest;
64
65#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
66pub struct ListEventsRequest {
67    #[serde(default)]
68    pub after: Option<u64>,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
72pub struct GetEventRequest {
73    pub id: EventId,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
77pub struct ExportEventsRequest;
78
79// ── Protocol enums ─────────────────────────────────────────────────
80
81#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
82#[serde(rename_all = "kebab-case", tag = "type", content = "data")]
83pub enum EventRequests {
84    ImportEvents(ImportEventsRequest),
85    ReplayEvents(ReplayEventsRequest),
86    ListEvents(ListEventsRequest),
87    GetEvent(GetEventRequest),
88    ExportEvents(ExportEventsRequest),
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
92#[serde(rename_all = "kebab-case", tag = "type", content = "data")]
93pub enum EventResponses {
94    Imported(ImportResponse),
95    Replayed(ReplayResponse),
96    Listed(Vec<Event>),
97    Found(Event),
98    Exported(Vec<Event>),
99}