use crossterm::style::Color;
#[doc = include_str!("../docs/style.md")]
#[allow(clippy::struct_excessive_bools)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Style {
pub fg: Option<Color>,
pub bg: Option<Color>,
pub bold: bool,
pub italic: bool,
pub underline: bool,
pub dim: bool,
pub strikethrough: bool,
}
impl Style {
pub fn fg(color: Color) -> Self {
Self::default().color(color)
}
pub fn color(mut self, color: Color) -> Self {
self.fg = Some(color);
self
}
pub fn bg_color(mut self, color: Color) -> Self {
self.bg = Some(color);
self
}
pub fn bold(mut self) -> Self {
self.bold = true;
self
}
pub fn italic(mut self) -> Self {
self.italic = true;
self
}
pub fn underline(mut self) -> Self {
self.underline = true;
self
}
#[allow(dead_code)]
pub fn dim(mut self) -> Self {
self.dim = true;
self
}
pub fn strikethrough(mut self) -> Self {
self.strikethrough = true;
self
}
pub fn merge(self, other: Self) -> Self {
Self {
fg: other.fg.or(self.fg),
bg: other.bg.or(self.bg),
bold: self.bold || other.bold,
italic: self.italic || other.italic,
underline: self.underline || other.underline,
dim: self.dim || other.dim,
strikethrough: self.strikethrough || other.strikethrough,
}
}
}