use crate::ansi::{Color, NamedColor, Style};
impl From<Color> for anstyle::Color {
fn from(color: Color) -> Self {
match color {
Color::Named(n) => anstyle::Color::Ansi(n.into()),
Color::Ansi256(n) => anstyle::Color::Ansi256(anstyle::Ansi256Color(n)),
Color::Rgb(r, g, b) => anstyle::Color::Rgb(anstyle::RgbColor(r, g, b)),
}
}
}
impl From<NamedColor> for anstyle::AnsiColor {
fn from(color: NamedColor) -> Self {
match color {
NamedColor::Black => anstyle::AnsiColor::Black,
NamedColor::Red => anstyle::AnsiColor::Red,
NamedColor::Green => anstyle::AnsiColor::Green,
NamedColor::Yellow => anstyle::AnsiColor::Yellow,
NamedColor::Blue => anstyle::AnsiColor::Blue,
NamedColor::Magenta => anstyle::AnsiColor::Magenta,
NamedColor::Cyan => anstyle::AnsiColor::Cyan,
NamedColor::White => anstyle::AnsiColor::White,
NamedColor::BrightBlack => anstyle::AnsiColor::BrightBlack,
NamedColor::BrightRed => anstyle::AnsiColor::BrightRed,
NamedColor::BrightGreen => anstyle::AnsiColor::BrightGreen,
NamedColor::BrightYellow => anstyle::AnsiColor::BrightYellow,
NamedColor::BrightBlue => anstyle::AnsiColor::BrightBlue,
NamedColor::BrightMagenta => anstyle::AnsiColor::BrightMagenta,
NamedColor::BrightCyan => anstyle::AnsiColor::BrightCyan,
NamedColor::BrightWhite => anstyle::AnsiColor::BrightWhite,
}
}
}
impl From<Style> for anstyle::Style {
fn from(style: Style) -> Self {
let mut out = anstyle::Style::new();
if let Some(fg) = style.fg {
out = out.fg_color(Some(fg.into()));
}
if let Some(bg) = style.bg {
out = out.bg_color(Some(bg.into()));
}
let mut effects = anstyle::Effects::new();
if style.bold {
effects = effects.insert(anstyle::Effects::BOLD);
}
if style.dim {
effects = effects.insert(anstyle::Effects::DIMMED);
}
if style.italic {
effects = effects.insert(anstyle::Effects::ITALIC);
}
if style.underline {
effects = effects.insert(anstyle::Effects::UNDERLINE);
}
if style.strikethrough {
effects = effects.insert(anstyle::Effects::STRIKETHROUGH);
}
if style.blink {
effects = effects.insert(anstyle::Effects::BLINK);
}
out.effects(effects)
}
}
impl From<anstyle::Style> for Style {
fn from(style: anstyle::Style) -> Self {
let mut out = Style::default();
out.fg = style.get_fg_color().map(|c| c.into());
out.bg = style.get_bg_color().map(|c| c.into());
let effects = style.get_effects();
out.bold = effects.contains(anstyle::Effects::BOLD);
out.dim = effects.contains(anstyle::Effects::DIMMED);
out.italic = effects.contains(anstyle::Effects::ITALIC);
out.underline = effects.contains(anstyle::Effects::UNDERLINE);
out.strikethrough = effects.contains(anstyle::Effects::STRIKETHROUGH);
out.blink = effects.contains(anstyle::Effects::BLINK);
out
}
}
impl From<anstyle::Color> for Color {
fn from(color: anstyle::Color) -> Self {
match color {
anstyle::Color::Ansi(a) => Color::Named(a.into()),
anstyle::Color::Ansi256(n) => Color::Ansi256(n.0),
anstyle::Color::Rgb(rgb) => Color::Rgb(rgb.0, rgb.1, rgb.2),
}
}
}
impl From<anstyle::AnsiColor> for NamedColor {
fn from(color: anstyle::AnsiColor) -> Self {
match color {
anstyle::AnsiColor::Black => NamedColor::Black,
anstyle::AnsiColor::Red => NamedColor::Red,
anstyle::AnsiColor::Green => NamedColor::Green,
anstyle::AnsiColor::Yellow => NamedColor::Yellow,
anstyle::AnsiColor::Blue => NamedColor::Blue,
anstyle::AnsiColor::Magenta => NamedColor::Magenta,
anstyle::AnsiColor::Cyan => NamedColor::Cyan,
anstyle::AnsiColor::White => NamedColor::White,
anstyle::AnsiColor::BrightBlack => NamedColor::BrightBlack,
anstyle::AnsiColor::BrightRed => NamedColor::BrightRed,
anstyle::AnsiColor::BrightGreen => NamedColor::BrightGreen,
anstyle::AnsiColor::BrightYellow => NamedColor::BrightYellow,
anstyle::AnsiColor::BrightBlue => NamedColor::BrightBlue,
anstyle::AnsiColor::BrightMagenta => NamedColor::BrightMagenta,
anstyle::AnsiColor::BrightCyan => NamedColor::BrightCyan,
anstyle::AnsiColor::BrightWhite => NamedColor::BrightWhite,
}
}
}