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

main
Elnu 1 year ago
parent 18e507e443
commit 9009ae9e24

29
Cargo.lock generated

@ -518,6 +518,7 @@ dependencies = [
"clap",
"clap_derive",
"dyesub",
"svg-units",
]
[[package]]
@ -584,6 +585,20 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "err-derive"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c34a887c8df3ed90498c1c437ce21f211c8e27672921a8ffa293cb8d6d4caa9e"
dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"rustversion",
"syn 1.0.109",
"synstructure",
]
[[package]]
name = "errno"
version = "0.3.2"
@ -1963,7 +1978,7 @@ dependencies = [
name = "svg-units"
version = "0.1.0"
dependencies = [
"derive_more",
"err-derive",
"lazy_static",
"regex",
"strum",
@ -2004,6 +2019,18 @@ dependencies = [
"syn 2.0.28",
]
[[package]]
name = "synstructure"
version = "0.12.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
"unicode-xid",
]
[[package]]
name = "thiserror"
version = "1.0.47"

@ -1,3 +1,3 @@
[workspace]
members = ["dyesub-tool", "dyesub-cli", "dyesub", "svg-units"]
resolver = "2"
resolver = "2"

@ -9,3 +9,4 @@ edition = "2021"
clap = "4.3.23"
clap_derive = "4.3.12"
dyesub = { path = "../dyesub" }
svg-units = { path = "../svg-units" }

@ -2,7 +2,7 @@ use std::path::PathBuf;
use clap::Parser;
use clap_derive::Parser;
use dyesub::Result;
use svg_units::SVGMeasure;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
@ -12,15 +12,21 @@ struct Args {
/// Output SVG path
#[arg(short, long)]
output: Option<PathBuf>,
/// Page width
#[arg(long, default_value="11in")]
width: SVGMeasure,
/// Page height
#[arg(long, default_value="8.5in")]
height: SVGMeasure,
}
fn main() -> Result<()> {
fn main() -> dyesub::Result<()> {
let args = Args::parse();
let output = args.output.unwrap_or_else(|| {
let mut path = args.input.clone();
path.set_extension("svg");
path
});
dyesub::render_file(&args.input, output)?;
dyesub::render_file(&args.input, &output)?;
Ok(())
}

@ -66,7 +66,7 @@ Updating `cargoHash`:
pname = "dyesub-cli";
version = "0.1.0";
buildAndTestSubdir = "dyesub-cli";
cargoHash = "sha256-S4GvLg/B/FxjNyrQyBg25OMTgJVVBwPO+Dy/EFM4WoQ=";
cargoHash = "sha256-6nbUjVjroFp2KZEk0wDisCUw2e9GtVxFgsGZm8xEe2A=";
meta = meta // {
description = "A tool for generating dye sublimation transfer sheet SVGs for Japanese thumb shift keycaps.";
};

@ -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"

@ -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;

@ -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 {

Loading…
Cancel
Save