use crate::components::Rgb;
#[derive(Clone, Default)]
pub struct Header {
pub values: Option<Vec<String>>,
pub height: Option<f64>,
pub align: Option<String>,
pub font: Option<String>,
pub fill: Option<Rgb>,
}
impl Header {
pub fn new() -> Self {
Self::default()
}
pub fn values(mut self, values: Vec<&str>) -> Self {
self.values = Some(values.into_iter().map(|s| s.to_string()).collect());
self
}
pub fn height(mut self, height: f64) -> Self {
self.height = Some(height);
self
}
pub fn align(mut self, align: impl Into<String>) -> Self {
self.align = Some(align.into());
self
}
pub fn font(mut self, font: &str) -> Self {
self.font = Some(font.to_string());
self
}
pub fn fill(mut self, fill: Rgb) -> Self {
self.fill = Some(fill);
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default() {
let header = Header::new();
assert!(header.values.is_none());
assert!(header.height.is_none());
assert!(header.align.is_none());
assert!(header.font.is_none());
assert!(header.fill.is_none());
}
#[test]
fn test_values() {
let header = Header::new().values(vec!["A", "B"]);
let values = header.values.unwrap();
assert_eq!(values, vec!["A".to_string(), "B".to_string()]);
}
#[test]
fn test_height() {
let header = Header::new().height(30.0);
assert!((header.height.unwrap() - 30.0).abs() < 1e-6);
}
#[test]
fn test_align() {
let header = Header::new().align("left");
assert_eq!(header.align, Some("left".to_string()));
}
#[test]
fn test_fill() {
let header = Header::new().fill(Rgb(200, 200, 200));
let fill = header.fill.unwrap();
assert_eq!(fill.0, 200);
assert_eq!(fill.1, 200);
assert_eq!(fill.2, 200);
}
}