28 lines
722 B
Rust
28 lines
722 B
Rust
/// Create a CSI-introduced sequence.
|
|
macro_rules! csi {
|
|
($( $l:expr ),*) => { concat!("\x1B[", $( $l ),*) };
|
|
}
|
|
|
|
/// Derive a CSI sequence struct.
|
|
macro_rules! derive_csi_sequence {
|
|
($doc:expr, $name:ident, $value:expr) => {
|
|
#[doc = $doc]
|
|
#[derive(Copy, Clone)]
|
|
pub struct $name;
|
|
|
|
impl fmt::Display for $name {
|
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
write!(f, csi!($value))
|
|
}
|
|
}
|
|
|
|
impl AsRef<[u8]> for $name {
|
|
fn as_ref(&self) -> &'static [u8] { csi!($value).as_bytes() }
|
|
}
|
|
|
|
impl AsRef<str> for $name {
|
|
fn as_ref(&self) -> &'static str { csi!($value) }
|
|
}
|
|
};
|
|
}
|