outbox_core/idempotency/
strategy.rs1use crate::config::IdempotencyStrategy;
2use crate::model::Event;
3
4impl IdempotencyStrategy {
5 pub fn invoke<F>(&self, provided_token: Option<String>, get_event: F) -> Option<String>
12 where
13 F: FnOnce() -> Option<Event>,
14 {
15 match self {
16 IdempotencyStrategy::Provided => provided_token,
17 IdempotencyStrategy::Custom(f) => {
18 let event = get_event().expect("Strategy is Custom, but no Event context provided");
19 Some(f(&event))
20 }
21 IdempotencyStrategy::Uuid => Some(uuid::Uuid::now_v7().to_string()),
22 IdempotencyStrategy::None => None,
26 }
27 }
28}