use super::*;
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "op", rename_all = "snake_case")]
pub enum EventsRequest {
AppendEvents {
protocol_version: u32,
namespace: String,
events: Vec<Event>,
},
AppendEventsIdempotent {
protocol_version: u32,
namespace: String,
events: Vec<Event>,
},
GetEvent {
protocol_version: u32,
namespace: String,
id: Uuid,
},
QueryEvents {
protocol_version: u32,
namespace: String,
filter: EventFilter,
page: PageRequest,
},
QueryEventPage {
protocol_version: u32,
namespace: String,
query: EventPageQuery,
},
CountEvents {
protocol_version: u32,
namespace: String,
#[serde(default)]
operator_read_budget_secs: Option<u64>,
filter: EventFilter,
},
CountEventsGrouped {
protocol_version: u32,
namespace: String,
#[serde(default)]
operator_read_budget_secs: Option<u64>,
filter: EventFilter,
group_by: EventGroupBy,
},
}
impl EventsRequest {
pub(super) fn protocol_version(&self) -> u32 {
match self {
Self::AppendEvents {
protocol_version, ..
}
| Self::AppendEventsIdempotent {
protocol_version, ..
}
| Self::GetEvent {
protocol_version, ..
}
| Self::QueryEvents {
protocol_version, ..
}
| Self::QueryEventPage {
protocol_version, ..
}
| Self::CountEvents {
protocol_version, ..
}
| Self::CountEventsGrouped {
protocol_version, ..
} => *protocol_version,
}
}
pub(super) fn count_budget_secs(&self) -> Option<Option<u64>> {
match self {
Self::CountEvents {
operator_read_budget_secs,
..
}
| Self::CountEventsGrouped {
operator_read_budget_secs,
..
} => Some(*operator_read_budget_secs),
_ => None,
}
}
pub(super) fn namespace(&self) -> &str {
match self {
Self::AppendEvents { namespace, .. }
| Self::AppendEventsIdempotent { namespace, .. }
| Self::GetEvent { namespace, .. }
| Self::QueryEvents { namespace, .. }
| Self::QueryEventPage { namespace, .. }
| Self::CountEvents { namespace, .. }
| Self::CountEventsGrouped { namespace, .. } => namespace,
}
}
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum EventsResponse {
Appended {
summary: BatchWriteSummary,
},
Idempotent {
result: IdempotentEventBatchResult,
},
Event {
event: Option<Event>,
},
Pageful {
page: Page<Event>,
},
EventPageWindow {
window: EventPageWindow,
},
Count {
count: u64,
},
GroupedCount {
counts: BTreeMap<String, u64>,
},
Error {
message: String,
retryable: bool,
#[serde(default)]
writer_task_failure: Option<WireWriterTaskFailure>,
#[serde(default, skip_serializing_if = "Option::is_none")]
sqlite_write_failure: Option<khive_storage::error::SqliteWriteFailure>,
#[serde(default, skip_serializing_if = "Option::is_none")]
read_failure: Option<WireReadFailure>,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum WireWriterTaskFailure {
RequestFailed {
request_state: WireWriterTaskState,
},
TaskTerminated {
request_state: WireWriterTaskState,
#[serde(default, skip_serializing_if = "Option::is_none")]
sqlite_full_codes: Option<(i32, i32)>,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum WireWriterTaskState {
NotStarted,
TransactionRolledBack,
SideEffectsUnknown,
}
impl From<khive_storage::WriterTaskRequestState> for WireWriterTaskState {
fn from(state: khive_storage::WriterTaskRequestState) -> Self {
use khive_storage::WriterTaskRequestState as S;
match state {
S::NotStarted => Self::NotStarted,
S::TransactionRolledBack => Self::TransactionRolledBack,
S::SideEffectsUnknown => Self::SideEffectsUnknown,
}
}
}
impl From<WireWriterTaskState> for khive_storage::WriterTaskRequestState {
fn from(state: WireWriterTaskState) -> Self {
use khive_storage::WriterTaskRequestState as S;
match state {
WireWriterTaskState::NotStarted => S::NotStarted,
WireWriterTaskState::TransactionRolledBack => S::TransactionRolledBack,
WireWriterTaskState::SideEffectsUnknown => S::SideEffectsUnknown,
}
}
}