use clap::{Parser, Subcommand};
use std::path::PathBuf;
use crate::commands::{
AddCommand, AuthCommand, BuildCommand, ConfigCommand, DevArgs, DiagnosticsArgs, FormatArgs, InitArgs, LintArgs,
LogsArgs, ModelsCommand, NodeArgs, RemoteCommand, RunCommand, SetupArgs, TopicsCommand, TopologyArgs, UploadArgs,
};
#[derive(Parser)]
#[command(name = "mecha10")]
#[command(about = "Mecha10 CLI - Build autonomous robots with RL", long_about = None)]
#[command(version)]
pub struct Cli {
#[arg(short, long, default_value = "info", global = true)]
pub log_level: String,
#[arg(short, long, global = true)]
pub config: Option<PathBuf>,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Add {
#[command(subcommand)]
command: AddCommand,
},
Auth {
#[command(subcommand)]
command: AuthCommand,
},
Build {
#[command(subcommand)]
command: BuildCommand,
},
Config {
#[command(subcommand)]
command: ConfigCommand,
},
Dev(#[command(flatten)] DevArgs),
Diagnostics(#[command(flatten)] DiagnosticsArgs),
Format(#[command(flatten)] FormatArgs),
Init(#[command(flatten)] InitArgs),
Lint(#[command(flatten)] LintArgs),
Logs(#[command(flatten)] LogsArgs),
Models {
#[command(subcommand)]
command: ModelsCommand,
},
#[command(hide = true)]
Node(#[command(flatten)] NodeArgs),
Remote {
#[command(subcommand)]
command: RemoteCommand,
},
Run {
#[command(subcommand)]
command: RunCommand,
},
Setup(#[command(flatten)] SetupArgs),
Status,
Topics {
#[command(subcommand)]
command: TopicsCommand,
},
Topology(#[command(flatten)] TopologyArgs),
Upload(#[command(flatten)] UploadArgs),
}