use std::collections::HashMap;
use crate::sheet::Result;
#[derive(Debug, Clone)]
pub struct NumberFormat {
pub id: u32,
pub code: String,
}
#[derive(Debug, Clone, Default)]
pub struct Font {
pub name: Option<String>,
pub size: Option<f64>,
pub bold: bool,
pub italic: bool,
pub color: Option<String>,
}
#[derive(Debug, Clone)]
pub enum Fill {
Pattern {
pattern_type: String,
fg_color: Option<String>,
bg_color: Option<String>,
},
Gradient,
}
#[derive(Debug, Clone, Default)]
pub struct Border {
pub left: Option<BorderStyle>,
pub right: Option<BorderStyle>,
pub top: Option<BorderStyle>,
pub bottom: Option<BorderStyle>,
}
#[derive(Debug, Clone)]
pub struct BorderStyle {
pub style: String,
pub color: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct CellStyle {
pub num_fmt_id: Option<u32>,
pub font_id: Option<u32>,
pub fill_id: Option<u32>,
pub border_id: Option<u32>,
pub alignment: Option<Alignment>,
}
#[derive(Debug, Clone)]
pub struct Alignment {
pub horizontal: Option<String>,
pub vertical: Option<String>,
pub wrap_text: bool,
}
#[derive(Debug, Default)]
pub struct Styles {
pub number_formats: HashMap<u32, NumberFormat>,
pub fonts: Vec<Font>,
pub fills: Vec<Fill>,
pub borders: Vec<Border>,
pub cell_styles: Vec<CellStyle>,
pub cell_xfs: Vec<CellStyle>,
}
impl Styles {
pub fn new() -> Self {
Self::default()
}
pub fn parse(_content: &str) -> Result<Self> {
Ok(Styles::default())
}
pub fn get_number_format(&self, id: u32) -> Option<&NumberFormat> {
self.number_formats.get(&id)
}
pub fn get_font(&self, id: usize) -> Option<&Font> {
self.fonts.get(id)
}
pub fn get_cell_style(&self, id: usize) -> Option<&CellStyle> {
self.cell_xfs.get(id)
}
}