Skip to main content

outbox_core/
config.rs

1use crate::model::Event;
2use serde::Serialize;
3use std::fmt::Debug;
4
5#[derive(Clone)]
6pub struct OutboxConfig<P>
7where
8    P: Debug + Clone + Serialize,
9{
10    pub batch_size: u32,
11    pub retention_days: i64,
12    pub gc_interval_secs: u64,
13    pub poll_interval_secs: u64,
14    pub lock_timeout_mins: i64,
15
16    pub idempotency_strategy: IdempotencyStrategy<P>,
17}
18
19impl<P> Default for OutboxConfig<P>
20where
21    P: Debug + Clone + Serialize,
22{
23    fn default() -> Self {
24        Self {
25            batch_size: 100,
26            retention_days: 7,
27            gc_interval_secs: 3600,
28            poll_interval_secs: 10,
29            lock_timeout_mins: 5,
30            idempotency_strategy: IdempotencyStrategy::None,
31        }
32    }
33}
34
35#[derive(Clone)]
36pub enum IdempotencyStrategy<P>
37where
38    P: Debug + Clone + Serialize,
39{
40    Provided,
41    Custom(fn(&Event<P>) -> String),
42    Uuid,
43    //TODO:
44    //HashPayload, //BLAKE3
45    None,
46}