use std::fmt;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum HighWaterCommand {
Bump { target: u64 },
}
impl fmt::Display for HighWaterCommand {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
HighWaterCommand::Bump { target } => write!(f, "Bump {{ target: {target} }}"),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_renders_bump() {
let cmd = HighWaterCommand::Bump { target: 42 };
assert_eq!(format!("{cmd}"), "Bump { target: 42 }");
}
#[test]
fn display_renders_zero_target() {
let cmd = HighWaterCommand::Bump { target: 0 };
assert_eq!(format!("{cmd}"), "Bump { target: 0 }");
}
#[test]
fn postcard_round_trip_bump() {
let cmd = HighWaterCommand::Bump {
target: 1_234_567_890,
};
let bytes = postcard::to_stdvec(&cmd).expect("serialize");
let back: HighWaterCommand = postcard::from_bytes(&bytes).expect("deserialize");
assert_eq!(back, cmd);
}
#[test]
fn postcard_round_trip_zero() {
let cmd = HighWaterCommand::Bump { target: 0 };
let bytes = postcard::to_stdvec(&cmd).expect("serialize");
let back: HighWaterCommand = postcard::from_bytes(&bytes).expect("deserialize");
assert_eq!(back, cmd);
}
#[test]
fn postcard_round_trip_max() {
let cmd = HighWaterCommand::Bump { target: u64::MAX };
let bytes = postcard::to_stdvec(&cmd).expect("serialize");
let back: HighWaterCommand = postcard::from_bytes(&bytes).expect("deserialize");
assert_eq!(back, cmd);
}
}