remora/crates/remora-contracts/src/events.rs

121 lines
3.4 KiB
Rust
Raw Normal View History

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<EventAttemptDto>,
pub progress: NullableDto<EventProgressDto>,
}
#[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<NullableDto<SafeIntegerDto>>,
pub completed_members: SafeIntegerDto,
#[serde(
default,
deserialize_with = "optional_nullable",
skip_serializing_if = "Option::is_none"
)]
pub total_members: Option<NullableDto<SafeIntegerDto>>,
}
#[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,
}