From 50cae5c9629eb329b77f6758b2679267bb3ba9a1 Mon Sep 17 00:00:00 2001 From: Sameer Puri Date: Sat, 20 Nov 2021 10:03:45 -0800 Subject: [PATCH] lib: split converter mod into files --- lib/src/converter/length_serde.rs | 77 ++++++++++++++++++++ lib/src/{converter.rs => converter/mod.rs} | 83 +--------------------- 2 files changed, 80 insertions(+), 80 deletions(-) create mode 100644 lib/src/converter/length_serde.rs rename lib/src/{converter.rs => converter/mod.rs} (88%) diff --git a/lib/src/converter/length_serde.rs b/lib/src/converter/length_serde.rs new file mode 100644 index 0000000..be9cd31 --- /dev/null +++ b/lib/src/converter/length_serde.rs @@ -0,0 +1,77 @@ +use serde::{ + de::{SeqAccess, Visitor}, + ser::SerializeSeq, + Deserialize, Deserializer, Serialize, Serializer, +}; +use svgtypes::{Length, LengthUnit}; + +pub fn serialize(length: &[Option; 2], serializer: S) -> Result +where + S: Serializer, +{ + let mut seq = serializer.serialize_seq(Some(2))?; + for i in 0..2 { + let length_def = length[i].clone().map(|length| LengthDef { + number: length.number, + unit: length.unit, + }); + seq.serialize_element(&length_def)?; + } + seq.end() +} + +struct OptionalLengthArrayVisitor; +impl<'de> Visitor<'de> for OptionalLengthArrayVisitor { + type Value = [Option; 2]; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(formatter, "SVG dimension array") + } + + fn visit_seq(self, mut seq: A) -> Result + where + A: SeqAccess<'de>, + { + let x = seq.next_element::>()?.flatten(); + let y = seq.next_element::>()?.flatten(); + Ok([ + x.map(|length_def| Length { + number: length_def.number, + unit: length_def.unit, + }), + y.map(|length_def| Length { + number: length_def.number, + unit: length_def.unit, + }), + ]) + } +} + +pub fn deserialize<'de, D>(deserializer: D) -> Result<[Option; 2], D::Error> +where + D: Deserializer<'de>, +{ + deserializer.deserialize_seq(OptionalLengthArrayVisitor) +} + +#[derive(Serialize, Deserialize)] +struct LengthDef { + number: f64, + #[serde(with = "LengthUnitDef")] + unit: LengthUnit, +} + +#[derive(Serialize, Deserialize)] +#[serde(remote = "LengthUnit")] +enum LengthUnitDef { + None, + Em, + Ex, + Px, + In, + Cm, + Mm, + Pt, + Pc, + Percent, +} diff --git a/lib/src/converter.rs b/lib/src/converter/mod.rs similarity index 88% rename from lib/src/converter.rs rename to lib/src/converter/mod.rs index afa5985..e6677c3 100644 --- a/lib/src/converter.rs +++ b/lib/src/converter/mod.rs @@ -17,6 +17,9 @@ use svgtypes::{ use crate::turtle::*; +#[cfg(feature = "serde")] +mod length_serde; + const SVG_TAG_NAME: &str = "svg"; /// High-level output configuration @@ -54,86 +57,6 @@ pub struct ConversionOptions { pub dimensions: [Option; 2], } -#[cfg(feature = "serde")] -mod length_serde { - use serde::{ - de::{SeqAccess, Visitor}, - ser::SerializeSeq, - Deserialize, Deserializer, Serialize, Serializer, - }; - use svgtypes::{Length, LengthUnit}; - - pub fn serialize(length: &[Option; 2], serializer: S) -> Result - where - S: Serializer, - { - let mut seq = serializer.serialize_seq(Some(2))?; - for i in 0..2 { - let length_def = length[i].clone().map(|length| LengthDef { - number: length.number, - unit: length.unit, - }); - seq.serialize_element(&length_def)?; - } - seq.end() - } - - struct OptionalLengthArrayVisitor; - impl<'de> Visitor<'de> for OptionalLengthArrayVisitor { - type Value = [Option; 2]; - - fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(formatter, "SVG dimension array") - } - - fn visit_seq(self, mut seq: A) -> Result - where - A: SeqAccess<'de>, - { - let x = seq.next_element::>()?.flatten(); - let y = seq.next_element::>()?.flatten(); - Ok([ - x.map(|length_def| Length { - number: length_def.number, - unit: length_def.unit, - }), - y.map(|length_def| Length { - number: length_def.number, - unit: length_def.unit, - }), - ]) - } - } - - pub fn deserialize<'de, D>(deserializer: D) -> Result<[Option; 2], D::Error> - where - D: Deserializer<'de>, - { - deserializer.deserialize_seq(OptionalLengthArrayVisitor) - } - - #[derive(Serialize, Deserialize)] - struct LengthDef { - number: f64, - #[serde(with = "LengthUnitDef")] - unit: LengthUnit, - } - - #[derive(Serialize, Deserialize)] - #[serde(remote = "LengthUnit")] - enum LengthUnitDef { - None, - Em, - Ex, - Px, - In, - Cm, - Mm, - Pt, - Pc, - Percent, - } -} pub fn svg2program<'input>( doc: &Document,