Add non-functional page dimension options to dyesub-cli, implement Error in svg-units

This commit is contained in:
Elnu 2023-08-23 14:44:04 -07:00
parent 18e507e443
commit 9009ae9e24
8 changed files with 60 additions and 15 deletions

View file

@ -6,7 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
derive_more = "0.99.17"
err-derive = "0.3.1"
lazy_static = "1.4.0"
regex = "1.9.3"
strum = "0.25.0"

View file

@ -2,7 +2,7 @@ mod unit;
pub use unit::SVGUnit;
mod measure;
pub use measure::SVGMeasure;
pub use measure::{SVGMeasure, SVGMeasureParseError};
#[cfg(test)]
mod tests;

View file

@ -1,5 +1,5 @@
use super::SVGUnit;
use derive_more::From;
use err_derive::Error;
use lazy_static::lazy_static;
use regex::Regex;
use std::cmp::Ordering;
@ -35,15 +35,18 @@ impl SVGMeasure {
}
}
#[derive(From, Debug)]
pub enum SVGUnitParseError {
ParseMeasure(ParseFloatError),
ParseUnit(ParseError),
#[derive(Debug, Error)]
pub enum SVGMeasureParseError {
#[error(display = "Failed to parse measure number")]
ParseMeasure(#[source] ParseFloatError),
#[error(display = "Failed to parse measure unit")]
ParseUnit(#[source] ParseError),
#[error(display = "Invalid measure format")]
Invalid,
}
impl FromStr for SVGMeasure {
type Err = SVGUnitParseError;
type Err = SVGMeasureParseError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
if s == "0" {
return Ok(SVGMeasure::new(0.0, SVGUnit::Pixel));
@ -56,11 +59,19 @@ impl FromStr for SVGMeasure {
let unit = captures[2].parse::<SVGUnit>()?;
Ok(SVGMeasure::new(measure, unit))
} else {
Err(SVGUnitParseError::Invalid)
Err(SVGMeasureParseError::Invalid)
}
}
}
impl<'s> TryFrom<&'s str> for SVGMeasure {
type Error = SVGMeasureParseError;
fn try_from(value: &'s str) -> Result<Self, Self::Error> {
Self::from_str(value)
}
}
const EQ_TOLERANCE: f64 = 0.00001;
impl PartialEq for SVGMeasure {