es_entity/
idempotent.rs

1#[must_use]
2pub enum Idempotent<T> {
3    Executed(T),
4    Ignored,
5}
6
7impl<T> Idempotent<T> {
8    pub fn was_ignored(&self) -> bool {
9        matches!(self, Idempotent::Ignored)
10    }
11
12    pub fn did_execute(&self) -> bool {
13        matches!(self, Idempotent::Executed(_))
14    }
15
16    pub fn unwrap(self) -> T {
17        match self {
18            Idempotent::Executed(t) => t,
19            Idempotent::Ignored => panic!("Idempotent::Ignored"),
20        }
21    }
22}
23
24pub trait FromIdempotentIgnored {
25    fn from_ignored() -> Self;
26}
27
28impl<T> FromIdempotentIgnored for Idempotent<T> {
29    fn from_ignored() -> Self {
30        Idempotent::Ignored
31    }
32}
33
34impl<T, E> FromIdempotentIgnored for Result<Idempotent<T>, E> {
35    fn from_ignored() -> Self {
36        Ok(Idempotent::Ignored)
37    }
38}