Skip to main content

outbox_core/
model.rs

1use crate::object::{EventType, Payload, EventId, IdempotencyToken};
2use time::OffsetDateTime;
3
4#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
5pub struct Event {
6    pub id: EventId,
7    pub idempotency_token: Option<IdempotencyToken>,
8    pub event_type: EventType,
9    pub payload: Payload,
10    pub created_at: OffsetDateTime,
11    pub locked_until: OffsetDateTime,
12    pub status: EventStatus,
13}
14impl Event {
15    pub fn new(event_type: EventType, payload: Payload, idempotency_token: Option<IdempotencyToken>) -> Self {
16        Self {
17            id: EventId::default(),
18            idempotency_token,
19            event_type,
20            payload,
21            created_at: OffsetDateTime::now_utc(),
22            locked_until: OffsetDateTime::UNIX_EPOCH,
23            status: EventStatus::Pending,
24        }
25    }
26}
27
28#[cfg_attr(feature = "sqlx", derive(Debug, sqlx::Type))]
29#[cfg_attr(
30    feature = "sqlx",
31    sqlx(type_name = "status", rename_all = "PascalCase")
32)]
33#[derive(Clone)]
34pub enum EventStatus {
35    // Messages that need to be sent (including Pending and Failed)
36    Pending,
37    Processing,
38    Sent,
39}