#![feature(generic_const_exprs)] #![feature(let_chains)] use std::fs::File; use std::path::PathBuf; use anyhow::Context; use crate::cli::cli::OutputFormat; use crate::system::model::HistoryLine; use crate::system::spaces::square_grid::Grid2D; use clap::{Parser, Command, Args, Subcommand}; use serde::de::DeserializeOwned; use serde::Deserialize; use svg::Node; use svg::node::element::Rectangle; use crate::system::Position; use crate::system::spaces::hexagonal::HexPosition; mod system; mod cli; mod tools; #[derive(Debug, Parser)] enum ToolsCli { Render(RenderCli), BoxCount(BoxCountCli) } #[derive(clap::ValueEnum, Clone, Debug, Copy)] enum Space { Grid2D, } #[derive(Debug, Args)] struct RenderCli { #[arg(value_enum, short, long, default_value_t = OutputFormat::Positions)] format: OutputFormat, #[arg(value_enum, short, long, default_value_t = Space::Grid2D)] space: Space, path: PathBuf, output: PathBuf, #[arg(short, long, default_value_t = 800)] image_size: u32, } #[derive(Debug, Args)] struct BoxCountCli { #[arg(value_enum, short, long, default_value_t = OutputFormat::Positions)] format: OutputFormat, path: PathBuf, output: PathBuf, } fn main() { let args = ToolsCli::parse(); dbg!(&args); match args { ToolsCli::Render(cli) => tools::render::main(&cli), ToolsCli::BoxCount(cli) => tools::boxcount::main(&cli), } }