use core::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default)]
pub struct Pid(u16);
impl Pid {
#[must_use]
pub const fn new(value: u16) -> Self {
Self(value)
}
#[must_use]
pub const fn get(self) -> u16 {
self.0
}
}
impl fmt::Display for Pid {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(&self.0, f)
}
}
#[cfg(test)]
mod tests {
use super::Pid;
#[test]
fn new_and_get_round_trip() {
assert_eq!(Pid::new(0x1011).get(), 0x1011);
assert_eq!(Pid::new(0).get(), 0);
assert_eq!(Pid::new(u16::MAX).get(), u16::MAX);
}
#[test]
fn default_is_pid_zero() {
assert_eq!(Pid::default(), Pid::new(0));
assert_eq!(Pid::default().get(), 0);
}
#[test]
fn display_forwards_to_the_inner_u16_with_format_flags() {
assert_eq!(Pid::new(4113).to_string(), "4113");
assert_eq!(format!("{:05}", Pid::new(4113)), "04113");
assert_eq!(format!("{}", Pid::new(0)), "0");
}
#[test]
fn orders_and_compares_like_the_inner_value() {
assert!(Pid::new(0x1011) < Pid::new(0x1100));
assert_eq!(Pid::new(0x1100).cmp(&Pid::new(0x1011)), core::cmp::Ordering::Greater);
assert_ne!(Pid::new(1), Pid::new(2));
let copied = Pid::new(7);
assert_eq!(format!("{copied:?}"), "Pid(7)");
assert_eq!(copied, Pid::new(7));
}
}