mod commands;
mod confirm_prompt;
mod format;
mod resolve;
mod value_parsers;
use clap::{Parser, Subcommand};
use commands::appearance::AppearanceArgs;
use commands::apps::AppsArgs;
use commands::create::CreateArgs;
use commands::delete::DeleteArgs;
use commands::erase::EraseArgs;
use commands::keychain::KeychainArgs;
use commands::list::ListArgs;
use commands::locale::LocaleArgs;
use commands::location::LocationArgs;
use commands::openurl::OpenUrlArgs;
use commands::privacy::PrivacyArgs;
use commands::record::RecordArgs;
use commands::screenshot::ScreenshotArgs;
use commands::simple::{BootArgs, FocusArgs, ShutdownArgs};
use commands::statusbar::StatusBarArgs;
use commands::tui::TuiArgs;
#[derive(Parser, Debug)]
#[command(name = "holodeck", about = "iOS Simulator management TUI/CLI")]
struct Cli {
#[command(subcommand)]
command: Option<Commands>,
}
#[derive(Subcommand, Debug)]
enum Commands {
List(ListArgs),
Boot(BootArgs),
Shutdown(ShutdownArgs),
Record(RecordArgs),
Screenshot(ScreenshotArgs),
Appearance(AppearanceArgs),
Statusbar(StatusBarArgs),
Locale(LocaleArgs),
Create(CreateArgs),
Erase(EraseArgs),
Delete(DeleteArgs),
Focus(FocusArgs),
Location(LocationArgs),
Privacy(PrivacyArgs),
Keychain(KeychainArgs),
Apps(AppsArgs),
Openurl(OpenUrlArgs),
Tui(TuiArgs),
}
#[tokio::main]
async fn main() {
let cli = Cli::parse();
let result = match cli.command {
Some(Commands::List(args)) => args.run().await,
Some(Commands::Boot(args)) => args.run().await,
Some(Commands::Shutdown(args)) => args.run().await,
Some(Commands::Record(args)) => args.run().await,
Some(Commands::Screenshot(args)) => args.run().await,
Some(Commands::Appearance(args)) => args.run().await,
Some(Commands::Statusbar(args)) => args.run().await,
Some(Commands::Locale(args)) => args.run().await,
Some(Commands::Create(args)) => args.run().await,
Some(Commands::Erase(args)) => args.run().await,
Some(Commands::Delete(args)) => args.run().await,
Some(Commands::Focus(args)) => args.run().await,
Some(Commands::Location(args)) => args.run().await,
Some(Commands::Privacy(args)) => args.run().await,
Some(Commands::Keychain(args)) => args.run().await,
Some(Commands::Apps(args)) => args.run().await,
Some(Commands::Openurl(args)) => args.run().await,
Some(Commands::Tui(args)) => args.run().await,
None => TuiArgs {}.run().await,
};
if let Err(err) = result {
eprintln!("Error: {err}");
std::process::exit(1);
}
}