use std::fmt::{Display, Formatter};
use std::ptr;
static NO_OP_TOKEN_VALUE: NoOpToken = NoOpToken { _identity: 0 };
#[derive(Debug)]
pub struct NoOpToken {
_identity: u8,
}
impl NoOpToken {
pub const VALUE: &'static Self = &NO_OP_TOKEN_VALUE;
}
impl PartialEq for NoOpToken {
fn eq(&self, other: &Self) -> bool {
ptr::eq(self, other)
}
}
impl Eq for NoOpToken {}
impl Display for NoOpToken {
fn fmt(&self, formatter: &mut Formatter<'_>) -> std::fmt::Result {
formatter.write_str("_")
}
}
#[cfg(test)]
mod tests {
use std::ptr;
use super::NoOpToken;
#[test]
fn exposes_singleton_identity_and_fixed_text() {
assert!(ptr::eq(NoOpToken::VALUE, NoOpToken::VALUE));
assert!(NoOpToken::VALUE.eq(NoOpToken::VALUE));
assert_eq!(NoOpToken::VALUE.to_string(), "_");
}
}