pub struct Inbox { /* private fields */ }Expand description
A dedup ledger over the Database port. Construct it with the table the
owning module declares (e.g. "<module>_inbox").
Implementations§
Source§impl Inbox
impl Inbox
pub fn new(table: impl Into<String>) -> Self
Sourcepub fn create_table_sql(&self) -> String
pub fn create_table_sql(&self) -> String
The portable DDL for the inbox table. The owning module ships this as a forward-only migration (it renders identically on SQLite/D1 and Postgres, ADR 0004).
Sourcepub async fn claim(
&self,
db: &dyn Database,
event_key: &str,
seen_at: &str,
) -> Result<bool, DbError>
pub async fn claim( &self, db: &dyn Database, event_key: &str, seen_at: &str, ) -> Result<bool, DbError>
Records event_key, returning true the first time it is seen
(proceed and apply the effect) and false for any later delivery of the
same id (a duplicate/replay/concurrent race — skip).
The insert is a single ON CONFLICT DO NOTHING statement, so it is
atomic on both D1 and Postgres: under concurrent claims of the same key
exactly one insert takes, and only that caller gets true. seen_at is
an RFC 3339 timestamp the caller reads from the Clock port.
§Errors
Returns DbError if the write fails.