47 lines
1.1 KiB
Rust
47 lines
1.1 KiB
Rust
/// Reset terminal formatting
|
|
#[allow(clippy::exhaustive_structs)]
|
|
#[derive(Copy, Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
|
pub struct Reset;
|
|
|
|
impl Reset {
|
|
/// Render the ANSI code
|
|
///
|
|
/// `Reset` also implements `Display` directly, so calling this method is optional.
|
|
#[inline]
|
|
pub fn render(self) -> impl core::fmt::Display + Copy {
|
|
self
|
|
}
|
|
}
|
|
|
|
impl core::fmt::Display for Reset {
|
|
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
|
|
write!(f, "{RESET}")
|
|
}
|
|
}
|
|
|
|
pub(crate) const RESET: &str = "\x1B[0m";
|
|
|
|
#[cfg(test)]
|
|
#[cfg(feature = "std")]
|
|
mod test {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn print_size_of() {
|
|
use std::mem::size_of;
|
|
dbg!(size_of::<Reset>());
|
|
}
|
|
|
|
#[test]
|
|
fn no_align() {
|
|
#[track_caller]
|
|
fn assert_no_align(d: impl core::fmt::Display) {
|
|
let expected = format!("{d}");
|
|
let actual = format!("{d:<10}");
|
|
assert_eq!(expected, actual);
|
|
}
|
|
|
|
assert_no_align(Reset);
|
|
assert_no_align(Reset.render());
|
|
}
|
|
}
|