use std::fmt;
use serde::{Deserialize, Serialize};
use tsoracle_consensus::AdvancePayload;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum HighWaterCommand {
Advance(AdvancePayload),
}
impl fmt::Display for HighWaterCommand {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
HighWaterCommand::Advance(AdvancePayload { at_least }) => {
write!(f, "Advance {{ at_least: {at_least} }}")
}
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_renders_advance() {
let cmd = HighWaterCommand::Advance(AdvancePayload { at_least: 42 });
assert_eq!(format!("{cmd}"), "Advance { at_least: 42 }");
}
#[test]
fn display_renders_zero_at_least() {
let cmd = HighWaterCommand::Advance(AdvancePayload { at_least: 0 });
assert_eq!(format!("{cmd}"), "Advance { at_least: 0 }");
}
#[test]
fn postcard_round_trip_advance() {
let cmd = HighWaterCommand::Advance(AdvancePayload {
at_least: 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::Advance(AdvancePayload { at_least: 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::Advance(AdvancePayload { at_least: u64::MAX });
let bytes = postcard::to_stdvec(&cmd).expect("serialize");
let back: HighWaterCommand = postcard::from_bytes(&bytes).expect("deserialize");
assert_eq!(back, cmd);
}
}