easydoc_writer/style/
banded_rows.rs1use easydoc_core::style::Color;
6
7#[derive(Debug, Clone)]
9pub struct BandedRowsStrategy {
10 pub even_color: Color,
12 pub odd_color: Option<Color>,
14}
15
16impl Default for BandedRowsStrategy {
17 fn default() -> Self {
18 Self {
19 even_color: Color::rgb(242, 242, 242),
20 odd_color: None,
21 }
22 }
23}
24
25impl BandedRowsStrategy {
26 #[must_use]
28 pub fn new() -> Self {
29 Self::default()
30 }
31
32 #[must_use]
34 pub fn color_for_row(&self, row_index: usize) -> Option<Color> {
35 if row_index.is_multiple_of(2) {
36 Some(self.even_color)
37 } else {
38 self.odd_color
39 }
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn default_strategy() {
49 let s = BandedRowsStrategy::default();
50 assert_eq!(s.even_color, Color::rgb(242, 242, 242));
51 assert!(s.odd_color.is_none());
52 }
53
54 #[test]
55 fn new_equals_default() {
56 let s = BandedRowsStrategy::new();
57 assert_eq!(s.even_color, BandedRowsStrategy::default().even_color);
58 }
59
60 #[test]
61 fn even_rows_use_even_color() {
62 let s = BandedRowsStrategy::new();
63 assert_eq!(s.color_for_row(0), Some(Color::rgb(242, 242, 242)));
64 assert_eq!(s.color_for_row(2), Some(Color::rgb(242, 242, 242)));
65 assert_eq!(s.color_for_row(4), Some(Color::rgb(242, 242, 242)));
66 }
67
68 #[test]
69 fn odd_rows_use_odd_color() {
70 let s = BandedRowsStrategy::new();
71 assert_eq!(s.color_for_row(1), None);
72 assert_eq!(s.color_for_row(3), None);
73 }
74
75 #[test]
76 fn custom_odd_color() {
77 let s = BandedRowsStrategy {
78 odd_color: Some(Color::WHITE),
79 ..Default::default()
80 };
81 assert_eq!(s.color_for_row(1), Some(Color::WHITE));
82 }
83}