use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
pub struct FsmState<T: Clone + Copy> {
pub state: T,
pub state_machine_id: Uuid,
}
impl<T: Clone + Copy> FsmState<T> {
pub fn new(state: T, state_machine_id: Uuid) -> Self {
Self {
state,
state_machine_id,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::entities::RunStatus;
#[test]
fn new_creates_with_values() {
let id = Uuid::nil();
let fsm = FsmState::new(RunStatus::Running, id);
assert_eq!(fsm.state, RunStatus::Running);
assert_eq!(fsm.state_machine_id, id);
}
#[test]
fn serde_roundtrip() {
let fsm = FsmState::new(RunStatus::Pending, Uuid::nil());
let json = serde_json::to_string(&fsm).expect("serialize");
let back: FsmState<RunStatus> = serde_json::from_str(&json).expect("deserialize");
assert_eq!(fsm, back);
}
}