diff options
Diffstat (limited to 'vendor/owo-colors/src/combo.rs')
-rw-r--r-- | vendor/owo-colors/src/combo.rs | 556 |
1 files changed, 0 insertions, 556 deletions
diff --git a/vendor/owo-colors/src/combo.rs b/vendor/owo-colors/src/combo.rs deleted file mode 100644 index e5675dd..0000000 --- a/vendor/owo-colors/src/combo.rs +++ /dev/null @@ -1,556 +0,0 @@ -use crate::{colors, BgDynColorDisplay, DynColor, FgDynColorDisplay}; -use crate::{BgColorDisplay, Color, FgColorDisplay}; - -use core::fmt; -use core::marker::PhantomData; - -#[cfg(doc)] -use crate::OwoColorize; - -/// A wrapper type which applies both a foreground and background color -pub struct ComboColorDisplay<'a, Fg: Color, Bg: Color, T>(&'a T, PhantomData<(Fg, Bg)>); - -/// Wrapper around a type which implements all the formatters the wrapped type does, -/// with the addition of changing the foreground and background color. Is not recommended -/// unless compile-time coloring is not an option. -pub struct ComboDynColorDisplay<'a, Fg: DynColor, Bg: DynColor, T>(&'a T, Fg, Bg); - -macro_rules! impl_fmt_for_combo { - ($($trait:path),* $(,)?) => { - $( - impl<'a, Fg: Color, Bg: Color, T: $trait> $trait for ComboColorDisplay<'a, Fg, Bg, T> { - #[inline(always)] - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str("\x1b[")?; - f.write_str(Fg::RAW_ANSI_FG)?; - f.write_str(";")?; - f.write_str(Bg::RAW_ANSI_BG)?; - f.write_str("m")?; - <T as $trait>::fmt(&self.0, f)?; - f.write_str("\x1b[0m") - } - } - )* - - $( - impl<'a, Fg: DynColor, Bg: DynColor, T: $trait> $trait for ComboDynColorDisplay<'a, Fg, Bg, T> { - #[inline(always)] - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str("\x1b[")?; - self.1.fmt_raw_ansi_fg(f)?; - f.write_str(";")?; - self.2.fmt_raw_ansi_bg(f)?; - f.write_str("m")?; - <T as $trait>::fmt(&self.0, f)?; - f.write_str("\x1b[0m") - } - } - )* - }; -} - -impl_fmt_for_combo! { - fmt::Display, - fmt::Debug, - fmt::UpperHex, - fmt::LowerHex, - fmt::Binary, - fmt::UpperExp, - fmt::LowerExp, - fmt::Octal, - fmt::Pointer, -} - -/// implement specialized color methods for FgColorDisplay BgColorDisplay, ComboColorDisplay -macro_rules! color_methods { - ($( - #[$fg_meta:meta] #[$bg_meta:meta] $color:ident $fg_method:ident $bg_method:ident - ),* $(,)?) => { - const _: () = (); // workaround for syntax highlighting bug - - impl<'a, Fg, T> FgColorDisplay<'a, Fg, T> - where - Fg: Color, - { - /// Set the foreground color at runtime. Only use if you do not know which color will be used at - /// compile-time. If the color is constant, use either [`OwoColorize::fg`](OwoColorize::fg) or - /// a color-specific method, such as [`OwoColorize::green`](OwoColorize::green), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "green".color(AnsiColors::Green)); - /// ``` - pub fn color<NewFg: DynColor>( - self, - fg: NewFg, - ) -> FgDynColorDisplay<'a, NewFg, T> { - FgDynColorDisplay(self.0, fg) - } - - /// Set the background color at runtime. Only use if you do not know what color to use at - /// compile-time. If the color is constant, use either [`OwoColorize::bg`](OwoColorize::bg) or - /// a color-specific method, such as [`OwoColorize::on_yellow`](OwoColorize::on_yellow), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "yellow background".on_color(AnsiColors::BrightYellow)); - /// ``` - pub fn on_color<NewBg: DynColor>( - self, - bg: NewBg, - ) -> ComboDynColorDisplay<'a, Fg::DynEquivelant, NewBg, T> { - ComboDynColorDisplay(self.0, Fg::DYN_EQUIVELANT, bg) - } - - /// Set the foreground color generically - /// - /// ```rust - /// use owo_colors::{OwoColorize, colors::*}; - /// - /// println!("{}", "red foreground".fg::<Red>()); - /// ``` - pub fn fg<C: Color>(self) -> FgColorDisplay<'a, C, T> { - FgColorDisplay(self.0, PhantomData) - } - - /// Set the background color generically. - /// - /// ```rust - /// use owo_colors::{OwoColorize, colors::*}; - /// - /// println!("{}", "black background".bg::<Black>()); - /// ``` - pub fn bg<C: Color>(self) -> ComboColorDisplay<'a, Fg, C, T> { - ComboColorDisplay(self.0, PhantomData) - } - - $( - #[$fg_meta] - #[inline(always)] - pub fn $fg_method(self) -> FgColorDisplay<'a, colors::$color, T> { - FgColorDisplay(self.0, PhantomData) - } - - #[$bg_meta] - #[inline(always)] - pub fn $bg_method(self) -> ComboColorDisplay<'a, Fg, colors::$color, T> { - ComboColorDisplay(self.0, PhantomData) - } - )* - } - - const _: () = (); // workaround for syntax highlighting bug - - impl<'a, Bg, T> BgColorDisplay<'a, Bg, T> - where - Bg: Color, - { - /// Set the foreground color at runtime. Only use if you do not know which color will be used at - /// compile-time. If the color is constant, use either [`OwoColorize::fg`](OwoColorize::fg) or - /// a color-specific method, such as [`OwoColorize::green`](OwoColorize::green), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "green".color(AnsiColors::Green)); - /// ``` - pub fn color<NewFg: DynColor>( - self, - fg: NewFg, - ) -> ComboDynColorDisplay<'a, NewFg, Bg::DynEquivelant, T> { - ComboDynColorDisplay(self.0, fg, Bg::DYN_EQUIVELANT) - } - - /// Set the background color at runtime. Only use if you do not know what color to use at - /// compile-time. If the color is constant, use either [`OwoColorize::bg`](OwoColorize::bg) or - /// a color-specific method, such as [`OwoColorize::on_yellow`](OwoColorize::on_yellow), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "yellow background".on_color(AnsiColors::BrightYellow)); - /// ``` - pub fn on_color<NewBg: DynColor>( - self, - bg: NewBg, - ) -> BgDynColorDisplay<'a, NewBg, T> { - BgDynColorDisplay(self.0, bg) - } - - /// Set the foreground color generically - /// - /// ```rust - /// use owo_colors::{OwoColorize, colors::*}; - /// - /// println!("{}", "red foreground".fg::<Red>()); - /// ``` - pub fn fg<C: Color>(self) -> ComboColorDisplay<'a, C, Bg, T> { - ComboColorDisplay(self.0, PhantomData) - } - - /// Set the background color generically. - /// - /// ```rust - /// use owo_colors::{OwoColorize, colors::*}; - /// - /// println!("{}", "black background".bg::<Black>()); - /// ``` - pub fn bg<C: Color>(self) -> BgColorDisplay<'a, C, T> { - BgColorDisplay(self.0, PhantomData) - } - - $( - #[$bg_meta] - #[inline(always)] - pub fn $bg_method(self) -> BgColorDisplay<'a, colors::$color, T> { - BgColorDisplay(self.0, PhantomData) - } - - #[$fg_meta] - #[inline(always)] - pub fn $fg_method(self) -> ComboColorDisplay<'a, colors::$color, Bg, T> { - ComboColorDisplay(self.0, PhantomData) - } - )* - } - - const _: () = (); // workaround for syntax highlighting bug - - impl<'a, Fg, Bg, T> ComboColorDisplay<'a, Fg, Bg, T> - where - Fg: Color, - Bg: Color, - { - /// Set the background color at runtime. Only use if you do not know what color to use at - /// compile-time. If the color is constant, use either [`OwoColorize::bg`](OwoColorize::bg) or - /// a color-specific method, such as [`OwoColorize::on_yellow`](OwoColorize::on_yellow), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "yellow background".on_color(AnsiColors::BrightYellow)); - /// ``` - pub fn on_color<NewBg: DynColor>( - self, - bg: NewBg, - ) -> ComboDynColorDisplay<'a, Fg::DynEquivelant, NewBg, T> { - ComboDynColorDisplay(self.0, Fg::DYN_EQUIVELANT, bg) - } - - /// Set the foreground color at runtime. Only use if you do not know which color will be used at - /// compile-time. If the color is constant, use either [`OwoColorize::fg`](OwoColorize::fg) or - /// a color-specific method, such as [`OwoColorize::green`](OwoColorize::green), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "green".color(AnsiColors::Green)); - /// ``` - pub fn color<NewFg: DynColor>( - self, - fg: NewFg, - ) -> ComboDynColorDisplay<'a, NewFg, Bg::DynEquivelant, T> { - ComboDynColorDisplay(self.0, fg, Bg::DYN_EQUIVELANT) - } - - /// Set the foreground color generically - /// - /// ```rust - /// use owo_colors::{OwoColorize, colors::*}; - /// - /// println!("{}", "red foreground".fg::<Red>()); - /// ``` - pub fn fg<C: Color>(self) -> ComboColorDisplay<'a, C, Bg, T> { - ComboColorDisplay(self.0, PhantomData) - } - - /// Set the background color generically. - /// - /// ```rust - /// use owo_colors::{OwoColorize, colors::*}; - /// - /// println!("{}", "black background".bg::<Black>()); - /// ``` - pub fn bg<C: Color>(self) -> ComboColorDisplay<'a, Fg, C, T> { - ComboColorDisplay(self.0, PhantomData) - } - - $( - #[$bg_meta] - #[inline(always)] - pub fn $bg_method(self) -> ComboColorDisplay<'a, Fg, colors::$color, T> { - ComboColorDisplay(self.0, PhantomData) - } - - #[$fg_meta] - #[inline(always)] - pub fn $fg_method(self) -> ComboColorDisplay<'a, colors::$color, Bg, T> { - ComboColorDisplay(self.0, PhantomData) - } - )* - } - }; -} - -const _: () = (); // workaround for syntax highlighting bug - -color_methods! { - /// Change the foreground color to black - /// Change the background color to black - Black black on_black, - /// Change the foreground color to red - /// Change the background color to red - Red red on_red, - /// Change the foreground color to green - /// Change the background color to green - Green green on_green, - /// Change the foreground color to yellow - /// Change the background color to yellow - Yellow yellow on_yellow, - /// Change the foreground color to blue - /// Change the background color to blue - Blue blue on_blue, - /// Change the foreground color to magenta - /// Change the background color to magenta - Magenta magenta on_magenta, - /// Change the foreground color to purple - /// Change the background color to purple - Magenta purple on_purple, - /// Change the foreground color to cyan - /// Change the background color to cyan - Cyan cyan on_cyan, - /// Change the foreground color to white - /// Change the background color to white - White white on_white, - - /// Change the foreground color to bright black - /// Change the background color to bright black - BrightBlack bright_black on_bright_black, - /// Change the foreground color to bright red - /// Change the background color to bright red - BrightRed bright_red on_bright_red, - /// Change the foreground color to bright green - /// Change the background color to bright green - BrightGreen bright_green on_bright_green, - /// Change the foreground color to bright yellow - /// Change the background color to bright yellow - BrightYellow bright_yellow on_bright_yellow, - /// Change the foreground color to bright blue - /// Change the background color to bright blue - BrightBlue bright_blue on_bright_blue, - /// Change the foreground color to bright magenta - /// Change the background color to bright magenta - BrightMagenta bright_magenta on_bright_magenta, - /// Change the foreground color to bright purple - /// Change the background color to bright purple - BrightMagenta bright_purple on_bright_purple, - /// Change the foreground color to bright cyan - /// Change the background color to bright cyan - BrightCyan bright_cyan on_bright_cyan, - /// Change the foreground color to bright white - /// Change the background color to bright white - BrightWhite bright_white on_bright_white, -} - -impl<'a, Fg: DynColor, T> FgDynColorDisplay<'a, Fg, T> { - /// Set the background color at runtime. Only use if you do not know what color to use at - /// compile-time. If the color is constant, use either [`OwoColorize::bg`](OwoColorize::bg) or - /// a color-specific method, such as [`OwoColorize::on_yellow`](OwoColorize::on_yellow), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "yellow background".on_color(AnsiColors::BrightYellow)); - /// ``` - pub fn on_color<Bg: DynColor>(self, bg: Bg) -> ComboDynColorDisplay<'a, Fg, Bg, T> { - let Self(inner, fg) = self; - ComboDynColorDisplay(inner, fg, bg) - } - - /// Set the foreground color at runtime. Only use if you do not know which color will be used at - /// compile-time. If the color is constant, use either [`OwoColorize::fg`](OwoColorize::fg) or - /// a color-specific method, such as [`OwoColorize::green`](OwoColorize::green), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "green".color(AnsiColors::Green)); - /// ``` - pub fn color<NewFg: DynColor>(self, fg: NewFg) -> FgDynColorDisplay<'a, NewFg, T> { - let Self(inner, _) = self; - FgDynColorDisplay(inner, fg) - } -} - -impl<'a, Bg: DynColor, T> BgDynColorDisplay<'a, Bg, T> { - /// Set the background color at runtime. Only use if you do not know what color to use at - /// compile-time. If the color is constant, use either [`OwoColorize::bg`](OwoColorize::bg) or - /// a color-specific method, such as [`OwoColorize::on_yellow`](OwoColorize::on_yellow), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "yellow background".on_color(AnsiColors::BrightYellow)); - /// ``` - pub fn on_color<NewBg: DynColor>(self, bg: NewBg) -> BgDynColorDisplay<'a, NewBg, T> { - let Self(inner, _) = self; - BgDynColorDisplay(inner, bg) - } - - /// Set the foreground color at runtime. Only use if you do not know which color will be used at - /// compile-time. If the color is constant, use either [`OwoColorize::fg`](OwoColorize::fg) or - /// a color-specific method, such as [`OwoColorize::green`](OwoColorize::green), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "green".color(AnsiColors::Green)); - /// ``` - pub fn color<Fg: DynColor>(self, fg: Fg) -> ComboDynColorDisplay<'a, Fg, Bg, T> { - let Self(inner, bg) = self; - ComboDynColorDisplay(inner, fg, bg) - } -} - -impl<'a, Fg: DynColor, Bg: DynColor, T> ComboDynColorDisplay<'a, Fg, Bg, T> { - /// Set the background color at runtime. Only use if you do not know what color to use at - /// compile-time. If the color is constant, use either [`OwoColorize::bg`](OwoColorize::bg) or - /// a color-specific method, such as [`OwoColorize::on_yellow`](OwoColorize::on_yellow), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "yellow background".on_color(AnsiColors::BrightYellow)); - /// ``` - pub fn on_color<NewBg: DynColor>(self, bg: NewBg) -> ComboDynColorDisplay<'a, Fg, NewBg, T> { - let Self(inner, fg, _) = self; - ComboDynColorDisplay(inner, fg, bg) - } - - /// Set the foreground color at runtime. Only use if you do not know which color will be used at - /// compile-time. If the color is constant, use either [`OwoColorize::fg`](OwoColorize::fg) or - /// a color-specific method, such as [`OwoColorize::green`](OwoColorize::green), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "green".color(AnsiColors::Green)); - /// ``` - pub fn color<NewFg: DynColor>(self, fg: NewFg) -> ComboDynColorDisplay<'a, NewFg, Bg, T> { - let Self(inner, _, bg) = self; - ComboDynColorDisplay(inner, fg, bg) - } -} - -#[cfg(test)] -mod tests { - use crate::{colors::*, AnsiColors, OwoColorize}; - - #[test] - fn fg_bg_combo() { - let test = "test".red().on_blue(); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn bg_fg_combo() { - let test = "test".on_blue().red(); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn fg_bg_dyn_combo() { - let test = "test".color(AnsiColors::Red).on_color(AnsiColors::Blue); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn bg_fg_dyn_combo() { - let test = "test".on_color(AnsiColors::Blue).color(AnsiColors::Red); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn fg_overide() { - let test = "test".green().yellow().red().on_blue(); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn bg_overide() { - let test = "test".on_green().on_yellow().on_blue().red(); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn multiple_overide() { - let test = "test" - .on_green() - .on_yellow() - .on_red() - .green() - .on_blue() - .red(); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - - let test = "test" - .color(AnsiColors::Blue) - .color(AnsiColors::White) - .on_color(AnsiColors::Black) - .color(AnsiColors::Red) - .on_color(AnsiColors::Blue); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - - let test = "test" - .on_yellow() - .on_red() - .on_color(AnsiColors::Black) - .color(AnsiColors::Red) - .on_color(AnsiColors::Blue); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - - let test = "test" - .yellow() - .red() - .color(AnsiColors::Red) - .on_color(AnsiColors::Black) - .on_color(AnsiColors::Blue); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - - let test = "test" - .yellow() - .red() - .on_color(AnsiColors::Black) - .color(AnsiColors::Red) - .on_color(AnsiColors::Blue); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn generic_multiple_override() { - use crate::colors::*; - - let test = "test" - .bg::<Green>() - .bg::<Yellow>() - .bg::<Red>() - .fg::<Green>() - .bg::<Blue>() - .fg::<Red>(); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn fg_bg_combo_generic() { - let test = "test".fg::<Red>().bg::<Blue>(); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } - - #[test] - fn bg_fg_combo_generic() { - let test = "test".bg::<Blue>().fg::<Red>(); - assert_eq!(test.to_string(), "\x1b[31;44mtest\x1b[0m"); - } -} |