From 947ecf2e1c54151457de15e424c1edf91431ff3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Cicho=C5=84?= Date: Sun, 29 Sep 2024 00:04:18 +0200 Subject: [PATCH] specctra: clean up the hack related to layer import --- src/specctra/design.rs | 3 +-- src/specctra/structure.rs | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/specctra/design.rs b/src/specctra/design.rs index 7585830..a5e6b0b 100644 --- a/src/specctra/design.rs +++ b/src/specctra/design.rs @@ -55,8 +55,7 @@ impl SpecctraDesign { /// pub fn load(reader: impl std::io::BufRead) -> Result { let mut list_reader = ListTokenizer::new(reader); - let mut dsn = list_reader.read_value::()?; - dsn.pcb.structure.layers.append(&mut dsn.pcb.structure.layers_easyeda); // temporary hack + let dsn = list_reader.read_value::()?; Ok(Self { pcb: dsn.pcb }) } diff --git a/src/specctra/structure.rs b/src/specctra/structure.rs index c3acd62..11674fd 100644 --- a/src/specctra/structure.rs +++ b/src/specctra/structure.rs @@ -80,7 +80,7 @@ pub struct Resolution { pub value: f32, } -#[derive(ReadDsn, WriteSes, Debug)] +#[derive(WriteSes, Debug)] pub struct Structure { #[vec("layer")] pub layers: Vec, @@ -95,10 +95,26 @@ pub struct Structure { // (in class rules it outputs a single rule with all clearances like KiCad) #[vec("rule")] pub rules: Vec, - // EasyEDA outputs these last... - // this is a horrible hack to see what else causes trouble - #[vec("layer")] - pub layers_easyeda: Vec, +} + +// custom impl to handle layers appearing late +impl ReadDsn for Structure { + fn read_dsn( + tokenizer: &mut ListTokenizer, + ) -> Result { + let mut value = Self { + layers: tokenizer.read_named_array("layer")?, + boundary: tokenizer.read_named("boundary")?, + planes: tokenizer.read_named_array("plane")?, + via: tokenizer.read_named("via")?, + grids: tokenizer.read_named_array("grid")?, + rules: tokenizer.read_named_array("rule")?, + }; + + value.layers.append(&mut tokenizer.read_named_array("layer")?); + + Ok(value) + } } #[derive(ReadDsn, WriteSes, Debug)]