use std::path::PathBuf; use argh::FromArgs; #[derive(FromArgs, PartialEq, Debug)] #[argh(description = "reid compiler and Virtual Machine")] pub struct MainOpt { #[argh(subcommand)] pub subcommand: Subcommand, } #[derive(FromArgs, PartialEq, Debug)] #[argh(subcommand)] pub enum Subcommand { Compile(Compile), Run(Run), CompileAndRun(CompileAndRun), } #[derive(FromArgs, PartialEq, Debug)] #[argh( subcommand, name = "compile", description = "compile to .reidc to path" )] pub struct Compile { #[argh(positional, description = "source .reid path")] pub source: String, #[argh(positional, description = "output .reidc path")] pub output: String, } #[derive(FromArgs, PartialEq, Debug)] #[argh( subcommand, name = "run", description = "run compiled .reidc from " )] pub struct Run { #[argh(positional, description = "otus 2")] pub path: String, } #[derive(FromArgs, PartialEq, Debug)] #[argh( subcommand, name = "c_run", description = "compile and run given .reid file" )] pub struct CompileAndRun { #[argh(positional, description = "source .reid path")] pub source: PathBuf, }