use easydoc_core::style::Color;
#[derive(Debug, Clone)]
pub struct BandedRowsStrategy {
pub even_color: Color,
pub odd_color: Option<Color>,
}
impl Default for BandedRowsStrategy {
fn default() -> Self {
Self {
even_color: Color::rgb(242, 242, 242),
odd_color: None,
}
}
}
impl BandedRowsStrategy {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn color_for_row(&self, row_index: usize) -> Option<Color> {
if row_index.is_multiple_of(2) {
Some(self.even_color)
} else {
self.odd_color
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_strategy() {
let s = BandedRowsStrategy::default();
assert_eq!(s.even_color, Color::rgb(242, 242, 242));
assert!(s.odd_color.is_none());
}
#[test]
fn new_equals_default() {
let s = BandedRowsStrategy::new();
assert_eq!(s.even_color, BandedRowsStrategy::default().even_color);
}
#[test]
fn even_rows_use_even_color() {
let s = BandedRowsStrategy::new();
assert_eq!(s.color_for_row(0), Some(Color::rgb(242, 242, 242)));
assert_eq!(s.color_for_row(2), Some(Color::rgb(242, 242, 242)));
assert_eq!(s.color_for_row(4), Some(Color::rgb(242, 242, 242)));
}
#[test]
fn odd_rows_use_odd_color() {
let s = BandedRowsStrategy::new();
assert_eq!(s.color_for_row(1), None);
assert_eq!(s.color_for_row(3), None);
}
#[test]
fn custom_odd_color() {
let s = BandedRowsStrategy {
odd_color: Some(Color::WHITE),
..Default::default()
};
assert_eq!(s.color_for_row(1), Some(Color::WHITE));
}
}