use std::fmt;
pub enum EscapeSequence {
SetGraphicsMode(Vec<u8>),
}
impl fmt::Display for EscapeSequence {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
EscapeSequence::SetGraphicsMode(v) => {
let mut s = String::with_capacity(100);
if v.len() > 0 {
s.push_str(v[0].to_string().as_str());
for i in v[1..].into_iter() {
s.push_str(";");
s.push_str(i.to_string().as_str());
}
}
write!(f, "{}", format!("\x1b[{}m", s))
}
}
}
}
#[macro_export]
macro_rules! reset {
() => {
$crate::escape_sequence::EscapeSequence::SetGraphicsMode(vec![$crate::consts::OP_RESET])
};
}
#[macro_export]
macro_rules! sgm {
($e:expr) => {
$crate::escape_sequence::EscapeSequence::SetGraphicsMode(($e))
};
}
#[cfg(test)]
mod tests {
pub use super::*;
pub use crate::consts::*;
#[test]
fn display() {
let s = sgm!(vec![OP_BOLD, FG_BLACK, BG_WHITE]);
assert_eq!("test: \x1b[1;30;47m", format!("test: {}", s));
}
}