use anyhow::{Context, Result}; use clap::Parser; use std::fs; #[derive(Parser)] #[command( name = "stitch-peek", about = "Embroidery file thumbnailer (PES, DST, EXP, JEF, VP3)" )] struct Args { /// Input embroidery file path #[arg(short = 'i', long = "input")] input: std::path::PathBuf, /// Output PNG file path #[arg(short = 'o', long = "output")] output: std::path::PathBuf, /// Thumbnail size in pixels #[arg(short = 's', long = "size", default_value = "128")] size: u32, } fn main() -> Result<()> { let args = Args::parse(); let format = rustitch::format::detect_from_extension(&args.input) .with_context(|| format!("unsupported file extension: {}", args.input.display()))?; let data = fs::read(&args.input) .with_context(|| format!("failed to read {}", args.input.display()))?; let png = rustitch::thumbnail_format(&data, args.size, format) .with_context(|| "failed to generate thumbnail")?; fs::write(&args.output, &png) .with_context(|| format!("failed to write {}", args.output.display()))?; Ok(()) }