From 830754db546245315844e2873c92573280ff55417f4ff1db7c52eeb9d3260282 Mon Sep 17 00:00:00 2001 From: Nicholas Johnson Date: Mon, 1 Apr 2024 00:00:00 +0000 Subject: Initial commit --- src/main.rs | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..6a44530 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,78 @@ +/* + hitomezashi-rs Generates classical colored Hitomezashi stitch patterns + Copyright (C) 2024 Nicholas Johnson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +use clap::{Parser, value_parser}; +use colored::Colorize; +use std::process::exit; + +mod hitomezashi; + +#[derive(Parser)] +#[command(version, about, long_about = None)] // Read from `Cargo.toml` +struct Cli { + /// Pattern width + #[arg(value_parser = value_parser!(usize))] + width: usize, + + /// Pattern height + #[arg(value_parser = value_parser!(usize))] + height: usize, + + #[arg(short, long)] + #[arg(default_value_t = 0.5)] + #[arg(value_parser = value_parser!(f32))] + /// Set skew + skew: f32, +} + +/* CLI for hitomezashi */ +fn main() { + let cli = Cli::parse(); + + // validate bounds of width [1..] + if cli.width < 1 { + println!("{} invalid value '{}' for '{}': valid values are [1..]\n\nFor more information, try '{}'.", + "error:".red().bold(), + cli.width.to_string().yellow(), + "".bold(), + "--help".bold()); + exit(2); + } + + // validate bounds of height [1..] + if cli.height < 1 { + println!("{} invalid value '{}' for '{}': valid values are [1..]\n\nFor more information, try '{}'.", + "error:".red().bold(), + cli.height.to_string().yellow(), + "".bold(), + "--help".bold()); + exit(2); + } + + // validate bounds of skew [0-1] + if cli.skew < 0.0 || cli.skew > 1.0 { + println!("{} invalid value '{}' for '{}': valid values are [0-1]\n\nFor more information, try '{}'.", + "error:".red().bold(), + cli.skew.to_string().yellow(), + "--skew ".bold(), + "--help".bold()); + exit(2); + } + + hitomezashi::hitomezashi(cli.width, cli.height, Some(cli.skew)); +} -- cgit v1.2.3