use remora_domain::{JobLifecycle, JobPhase, OpaqueId}; use serde::{Deserialize, Serialize}; use crate::{ CursorDto, DateTimeDto, NullableDto, PositiveIntegerDto, SafeIntegerDto, SchemaVersionDto, wire::optional_nullable, }; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(tag = "kind", rename_all = "snake_case")] pub enum EventFrameDto { JobChanged(JobChangedDto), DeletionChanged(DeletionChangedDto), ResyncRequired(ResyncRequiredDto), Heartbeat(HeartbeatDto), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct EventTicketDto { pub ticket: OpaqueId, pub expires_at: DateTimeDto, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct JobChangedDto { pub schema_version: SchemaVersionDto, pub event_id: OpaqueId, pub sequence: PositiveIntegerDto, pub cursor: CursorDto, pub occurred_at: DateTimeDto, pub job_id: OpaqueId, pub job_revision: PositiveIntegerDto, pub phase: JobPhase, pub lifecycle: JobLifecycle, pub authoritative_attempt: NullableDto, pub progress: NullableDto, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct EventAttemptDto { pub attempt_id: OpaqueId, pub fence: PositiveIntegerDto, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct EventProgressDto { pub attempt_id: OpaqueId, pub fence: PositiveIntegerDto, pub completed_bytes: SafeIntegerDto, #[serde( default, deserialize_with = "optional_nullable", skip_serializing_if = "Option::is_none" )] pub total_bytes: Option>, pub completed_members: SafeIntegerDto, #[serde( default, deserialize_with = "optional_nullable", skip_serializing_if = "Option::is_none" )] pub total_members: Option>, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct DeletionChangedDto { pub schema_version: SchemaVersionDto, pub event_id: OpaqueId, pub sequence: PositiveIntegerDto, pub cursor: CursorDto, pub occurred_at: DateTimeDto, pub job_id: OpaqueId, pub operation_id: OpaqueId, pub state: DeletionStateDto, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum DeletionStateDto { Queued, Running, RetryWait, Blocked, Completed, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct ResyncRequiredDto { pub schema_version: SchemaVersionDto, pub event_id: OpaqueId, pub sequence: PositiveIntegerDto, pub cursor: CursorDto, pub occurred_at: DateTimeDto, pub reason: ResyncReasonDto, } #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum ResyncReasonDto { CursorAbsent, CursorInvalid, CursorExpired, AuthorizationChanged, HistoryUnavailable, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct HeartbeatDto { pub schema_version: SchemaVersionDto, pub event_id: OpaqueId, pub sequence: PositiveIntegerDto, pub cursor: CursorDto, pub occurred_at: DateTimeDto, }