use super::color::Color;
use super::font::FontConfig;
#[derive(Debug, Clone)]
pub struct TableStyle {
pub header_font: FontConfig,
pub content_font: FontConfig,
pub header_background: Option<Color>,
pub banded_rows: bool,
pub even_row_background: Option<Color>,
pub odd_row_background: Option<Color>,
pub auto_width: bool,
pub borders: bool,
}
impl Default for TableStyle {
fn default() -> Self {
Self {
header_font: FontConfig::header(),
content_font: FontConfig::default(),
header_background: Some(Color::HEADER_BLUE),
banded_rows: false,
even_row_background: Some(Color::rgb(242, 242, 242)),
odd_row_background: None, auto_width: false,
borders: true,
}
}
}
impl TableStyle {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn header() -> Self {
Self::default()
}
#[must_use]
pub fn simple() -> Self {
Self {
borders: false,
header_background: None,
header_font: FontConfig::bold(),
..Default::default()
}
}
#[must_use]
pub fn banded_rows(mut self, enabled: bool) -> Self {
self.banded_rows = enabled;
self
}
#[must_use]
pub fn auto_width(mut self, enabled: bool) -> Self {
self.auto_width = enabled;
self
}
#[must_use]
pub fn borders(mut self, enabled: bool) -> Self {
self.borders = enabled;
self
}
#[must_use]
pub fn header_background(mut self, color: Color) -> Self {
self.header_background = Some(color);
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_table_style() {
let s = TableStyle::default();
assert!(s.borders);
assert!(!s.banded_rows);
assert!(!s.auto_width);
assert_eq!(s.header_background, Some(Color::HEADER_BLUE));
}
#[test]
fn new_equals_default() {
let s = TableStyle::new();
assert!(s.borders);
}
#[test]
fn header_style() {
let s = TableStyle::header();
assert!(s.borders);
assert_eq!(s.header_background, Some(Color::HEADER_BLUE));
}
#[test]
fn simple_style() {
let s = TableStyle::simple();
assert!(!s.borders);
assert!(s.header_background.is_none());
assert!(s.header_font.bold);
}
#[test]
fn builder_chain() {
let s = TableStyle::new()
.banded_rows(true)
.auto_width(true)
.borders(false)
.header_background(Color::RED);
assert!(s.banded_rows);
assert!(s.auto_width);
assert!(!s.borders);
assert_eq!(s.header_background, Some(Color::RED));
}
}