use serde::{Deserialize, Serialize};
use crate::*;
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(untagged)]
pub enum ImportEvent {
Valid {
id: EventId,
source: Source,
timestamp: String,
data: serde_json::Value,
},
Unsourced {
id: EventId,
timestamp: String,
data: serde_json::Value,
},
}
impl ImportEvent {
pub fn with_source(self, source: Source) -> Self {
match self {
ImportEvent::Unsourced {
id,
timestamp,
data,
} => ImportEvent::Valid {
id,
source,
timestamp,
data,
},
valid @ ImportEvent::Valid { .. } => valid,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ImportResponse {
pub imported: usize,
pub replayed: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ReplayResponse {
pub replayed: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct SelectEventById {
pub id: EventId,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ImportEventsRequest {
pub events: Vec<ImportEvent>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ReplayEventsRequest;
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ListEventsRequest {
#[serde(default)]
pub after: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct GetEventRequest {
pub id: EventId,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ExportEventsRequest;
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "kebab-case", tag = "type", content = "data")]
pub enum EventRequests {
ImportEvents(ImportEventsRequest),
ReplayEvents(ReplayEventsRequest),
ListEvents(ListEventsRequest),
GetEvent(GetEventRequest),
ExportEvents(ExportEventsRequest),
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "kebab-case", tag = "type", content = "data")]
pub enum EventResponses {
Imported(ImportResponse),
Replayed(ReplayResponse),
Listed(Vec<Event>),
Found(Event),
Exported(Vec<Event>),
}