style_domain_probe/
style_domain_probe.rs1use crabxl::{ColorKind, Fill, WorkbookReader, WorkbookWriter, WriteOptions};
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4 let path = std::env::args().nth(1).ok_or("Missing fixture path")?;
5 let mut book = WorkbookReader::new(std::fs::File::open(path)?)?;
6 let catalog = book.style_catalog()?.ok_or("Missing styles")?;
7 for size in [-1.0, 410.0, 1_000_000.0] {
8 if !catalog.fonts.iter().any(|font| font.size == Some(size)) {
9 return Err("Missing finite font size".into());
10 }
11 }
12 if !catalog.fills.iter().any(|fill| matches!(fill, Fill::Gradient(g) if g.edges[0] == Some(-1.0) && g.edges[1] == Some(2.0))) {
13 return Err("Missing gradient edges".into());
14 }
15 if !catalog
16 .number_formats
17 .iter()
18 .any(|format| format.code().is_empty())
19 {
20 return Err("Missing empty number format".into());
21 }
22 if !catalog.fonts.iter().any(|font| {
23 font.color
24 .as_ref()
25 .is_some_and(|color| color.kind == ColorKind::Indexed(3.into()))
26 }) {
27 return Err("Missing selected indexed color".into());
28 }
29 if let Some(output) = std::env::args().nth(2) {
30 let sheet = book.read_sheet("Sheet")?;
31 let catalog = book.into_style_catalog()?.ok_or("Missing styles")?;
32 let mut writer = WorkbookWriter::from_style_catalog(WriteOptions::default(), catalog)?;
33 writer.start_sheet("Sheet")?;
34 for row in &sheet.rows {
35 writer.write_row(row)?;
36 }
37 writer.finish(std::fs::File::create(output)?)?;
38 }
39 println!("finite-style-domains-ok");
40 Ok(())
41}