use clap::{Args, Subcommand};
use crate::exit_code::ExitCode;
use crate::output::OutputConfig;
use super::{anonymous, cors, event, ilm, ls, mb, quota, rb, replicate, version};
const BUCKET_AFTER_HELP: &str = "\
Examples:
rc bucket list local/
rc bucket create local/my-bucket
rc bucket remove local/my-bucket
rc bucket event list local/my-bucket
rc bucket cors list local/my-bucket
rc bucket replication status local/my-bucket";
#[derive(Args, Debug)]
#[command(after_help = BUCKET_AFTER_HELP)]
pub struct BucketArgs {
#[command(subcommand)]
pub command: BucketCommands,
}
#[derive(Subcommand, Debug)]
pub enum BucketCommands {
#[command(alias = "ls")]
List(ls::LsArgs),
Create(mb::MbArgs),
Remove(rb::RbArgs),
#[command(subcommand)]
Event(event::EventCommands),
#[command(subcommand)]
Cors(cors::CorsCommands),
#[command(subcommand)]
Version(version::VersionCommands),
#[command(subcommand)]
Quota(quota::QuotaCommands),
#[command(subcommand)]
Anonymous(anonymous::AnonymousCommands),
#[command(name = "lifecycle")]
Lifecycle(ilm::IlmArgs),
#[command(name = "replication")]
Replication(replicate::ReplicateArgs),
}
pub async fn execute(args: BucketArgs, output_config: OutputConfig) -> ExitCode {
match args.command {
BucketCommands::List(args) => ls::execute(args, output_config).await,
BucketCommands::Create(args) => mb::execute(args, output_config).await,
BucketCommands::Remove(args) => rb::execute(args, output_config).await,
BucketCommands::Event(cmd) => {
event::execute(event::EventArgs { command: cmd }, output_config).await
}
BucketCommands::Cors(cmd) => {
cors::execute(cors::CorsArgs { command: cmd }, output_config).await
}
BucketCommands::Version(cmd) => {
version::execute(version::VersionArgs { command: cmd }, output_config).await
}
BucketCommands::Quota(cmd) => {
quota::execute(quota::QuotaArgs { command: cmd }, output_config).await
}
BucketCommands::Anonymous(cmd) => {
anonymous::execute(anonymous::AnonymousArgs { command: cmd }, output_config).await
}
BucketCommands::Lifecycle(args) => ilm::execute(args, output_config).await,
BucketCommands::Replication(args) => replicate::execute(args, output_config).await,
}
}