oneiros_model/protocol/
event_ops.rs1use 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#[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#[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}