use serde::{Deserialize, Serialize};
use crate::value_objects::IdempotencyKey;
use super::ProcessedActionKind;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ProcessedActionRef {
kind: ProcessedActionKind,
#[serde(default, skip_serializing_if = "Option::is_none")]
idempotency_key: Option<IdempotencyKey>,
}
impl ProcessedActionRef {
#[must_use]
pub const fn new(kind: ProcessedActionKind, idempotency_key: Option<IdempotencyKey>) -> Self {
Self {
kind,
idempotency_key,
}
}
#[must_use]
pub const fn of(kind: ProcessedActionKind) -> Self {
Self::new(kind, None)
}
#[must_use]
pub const fn kind(&self) -> ProcessedActionKind {
self.kind
}
#[must_use]
pub const fn idempotency_key(&self) -> Option<&IdempotencyKey> {
self.idempotency_key.as_ref()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn the_same_act_offered_twice_is_one_act() {
assert_eq!(
ProcessedActionRef::of(ProcessedActionKind::Responded),
ProcessedActionRef::of(ProcessedActionKind::Responded)
);
assert_ne!(
ProcessedActionRef::of(ProcessedActionKind::Responded),
ProcessedActionRef::of(ProcessedActionKind::NoAction)
);
}
}