use clap::{
Parser, Subcommand, ValueEnum,
builder::styling::{AnsiColor, Effects, Styles}
};
const HELP_STYLES: Styles = Styles::styled()
.header(AnsiColor::Yellow.on_default().effects(Effects::BOLD))
.usage(AnsiColor::Yellow.on_default().effects(Effects::BOLD))
.literal(AnsiColor::Cyan.on_default().effects(Effects::BOLD))
.placeholder(AnsiColor::Green.on_default())
.error(AnsiColor::Red.on_default().effects(Effects::BOLD))
.valid(AnsiColor::Green.on_default())
.invalid(AnsiColor::Red.on_default());
mod apps;
mod balancers;
pub mod completers;
mod databases;
mod domains;
mod firewall;
mod images;
mod kubernetes;
mod network;
mod projects;
mod registry;
mod s3;
mod servers;
mod settings;
mod ssh;
pub use apps::AppsCommands;
pub use balancers::BalancerCommands;
pub use databases::DatabaseCommands;
pub use domains::DomainCommands;
pub use firewall::FirewallCommands;
pub use images::ImageCommands;
pub use kubernetes::KubernetesCommands;
pub use network::{IpCommands, VpcCommands};
pub use projects::ProjectCommands;
pub use registry::RegistryCommands;
pub use s3::S3Commands;
pub use servers::ServerCommands;
pub use settings::{AccountCommands, AuthCommands, ConfigCommands};
pub use ssh::SshCommands;
#[derive(ValueEnum, Clone, Copy, Debug)]
pub enum LangArg {
En,
Ru
}
#[derive(ValueEnum, Clone, Copy, Debug)]
pub enum ShellArg {
Bash,
Zsh,
Fish,
Powershell,
Elvish,
Nushell
}
#[derive(Parser, Debug)]
#[command(
name = "twc-rs",
version,
about = "Timeweb Cloud CLI — servers, databases, S3, Kubernetes, apps and more",
styles = HELP_STYLES
)]
pub struct Cli {
#[arg(
short,
long,
global = true,
default_value = "table",
env = "TWC_OUTPUT",
display_order = 900
)]
pub format: String,
#[arg(short, long, global = true, env = "TWC_TOKEN", display_order = 901)]
pub token: Option<String>,
#[arg(long, global = true, env = "TWC_PROFILE", display_order = 902)]
pub profile: Option<String>,
#[command(subcommand)]
pub command: Commands
}
#[derive(Subcommand, Debug)]
pub enum Commands {
#[command(subcommand)]
Server(ServerCommands),
#[command(subcommand)]
Ssh(SshCommands),
#[command(subcommand)]
Project(ProjectCommands),
#[command(subcommand)]
Database(DatabaseCommands),
#[command(subcommand)]
S3(S3Commands),
#[command(subcommand)]
Kubernetes(KubernetesCommands),
#[command(subcommand)]
Registry(RegistryCommands),
#[command(subcommand)]
Balancer(BalancerCommands),
#[command(subcommand)]
Domain(DomainCommands),
#[command(subcommand)]
Firewall(FirewallCommands),
#[command(subcommand)]
Apps(AppsCommands),
#[command(subcommand)]
Image(ImageCommands),
#[command(subcommand)]
Ip(IpCommands),
#[command(subcommand)]
Vpc(VpcCommands),
#[command(subcommand)]
Account(AccountCommands),
#[command(subcommand)]
Config(ConfigCommands),
#[command(subcommand)]
Auth(AuthCommands),
Dashboard {
#[arg(short, long, default_value_t = 5)]
interval: u64
},
Completions {
#[arg(value_enum)]
shell: ShellArg
},
Doctor,
Update {
#[arg(long)]
check: bool
}
}
#[cfg(test)]
mod tests;