use crate::introducers::ESC;
use std::fmt::{Display, Formatter};
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, PartialOrd, Ord)]
pub struct EscapeSequence(char);
impl EscapeSequence {
pub const fn new(with: char) -> Self {
Self(with)
}
}
impl Display for EscapeSequence {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}{}", ESC, self.0)
}
}
pub const fn escape(c: char) -> EscapeSequence {
EscapeSequence::new(c)
}
pub const PAD: EscapeSequence = escape('@');
pub const HOP: EscapeSequence = escape('A');
pub const IND: EscapeSequence = escape('D');
pub const PU1: EscapeSequence = escape('Q');
pub const PU2: EscapeSequence = escape('R');
pub const STS: EscapeSequence = escape('S');
pub const CCH: EscapeSequence = escape('T');
pub const MW: EscapeSequence = escape('U');
pub const SGC: EscapeSequence = escape('Y');
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_escape_sequence_new() {
let seq = EscapeSequence::new('A');
assert_eq!(seq.0, 'A');
}
#[test]
fn test_escape_sequence_display() {
let seq = EscapeSequence::new('A');
let formatted = format!("{}", seq);
assert_eq!(formatted, format!("{}A", ESC));
}
#[test]
fn test_escape_function() {
let seq = escape('B');
assert_eq!(seq.0, 'B');
}
#[test]
fn test_constants_display() {
assert_eq!(format!("{}", PAD), format!("{}@", ESC));
assert_eq!(format!("{}", HOP), format!("{}A", ESC));
assert_eq!(format!("{}", IND), format!("{}D", ESC));
assert_eq!(format!("{}", PU1), format!("{}Q", ESC));
assert_eq!(format!("{}", PU2), format!("{}R", ESC));
assert_eq!(format!("{}", STS), format!("{}S", ESC));
assert_eq!(format!("{}", CCH), format!("{}T", ESC));
assert_eq!(format!("{}", MW), format!("{}U", ESC));
assert_eq!(format!("{}", SGC), format!("{}Y", ESC));
}
}