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 None,
46}