use std::process::ExitCode;
use clap::FromArgMatches;
use clap_complete::generate;
mod batch_run;
mod clean_bin;
mod cli;
mod dispatch;
mod ls_bin;
mod sync_bin;
mod util_bin;
use cli::{Cli, Cmd, cli_command};
#[tokio::main]
async fn main() -> ExitCode {
let cli_args = match Cli::from_arg_matches(&cli_command().get_matches()) {
Ok(c) => c,
Err(e) => e.exit(),
};
if let Some(shell) = cli_args.auto_complete_shell {
generate(shell, &mut cli_command(), "s7cmd", &mut std::io::stdout());
return ExitCode::SUCCESS;
}
let command = cli_args
.command
.expect("clap's arg_required_else_help should have prevented this");
init_tracing_for(&command);
let exit_code = dispatch::dispatch(command).await;
ExitCode::from(exit_code as u8)
}
fn init_tracing_for(cmd: &Cmd) {
use s3util_rs::config::TracingConfig;
let tc: Option<TracingConfig> = match cmd {
Cmd::BatchRun(args) => args.build_tracing_config(),
Cmd::Sync(_) | Cmd::Ls(_) | Cmd::Clean(_) | Cmd::Cp(_) | Cmd::Mv(_) => return,
Cmd::Rename(args) => args.build_tracing_config_dry_run(args.dry_run),
Cmd::Rm(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::CreateBucket(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteBucket(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::HeadBucket(args) => args.common.build_tracing_config(),
Cmd::HeadObject(args) => args.common.build_tracing_config(),
Cmd::GetObjectTagging(args) => args.common.build_tracing_config(),
Cmd::PutObjectTagging(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteObjectTagging(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::GetObjectAnnotation(args) => args.common.build_tracing_config(),
Cmd::PutObjectAnnotation(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteObjectAnnotation(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::ListObjectAnnotations(args) => args.common.build_tracing_config(),
Cmd::GetBucketTagging(args) => args.common.build_tracing_config(),
Cmd::PutBucketTagging(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteBucketTagging(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::GetBucketPolicy(args) => args.common.build_tracing_config(),
Cmd::PutBucketPolicy(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteBucketPolicy(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::GetBucketVersioning(args) => args.common.build_tracing_config(),
Cmd::PutBucketVersioning(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::GetBucketLifecycleConfiguration(args) => args.common.build_tracing_config(),
Cmd::PutBucketLifecycleConfiguration(args) => {
args.common.build_tracing_config_dry_run(args.dry_run)
}
Cmd::DeleteBucketLifecycleConfiguration(args) => {
args.common.build_tracing_config_dry_run(args.dry_run)
}
Cmd::GetBucketEncryption(args) => args.common.build_tracing_config(),
Cmd::PutBucketEncryption(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteBucketEncryption(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::GetBucketCors(args) => args.common.build_tracing_config(),
Cmd::PutBucketCors(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteBucketCors(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::GetPublicAccessBlock(args) => args.common.build_tracing_config(),
Cmd::PutPublicAccessBlock(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeletePublicAccessBlock(args) => {
args.common.build_tracing_config_dry_run(args.dry_run)
}
Cmd::GetBucketWebsite(args) => args.common.build_tracing_config(),
Cmd::PutBucketWebsite(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteBucketWebsite(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::GetBucketLogging(args) => args.common.build_tracing_config(),
Cmd::PutBucketLogging(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::GetBucketNotificationConfiguration(args) => args.common.build_tracing_config(),
Cmd::PutBucketNotificationConfiguration(args) => {
args.common.build_tracing_config_dry_run(args.dry_run)
}
Cmd::GetBucketReplication(args) => args.common.build_tracing_config(),
Cmd::PutBucketReplication(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::DeleteBucketReplication(args) => {
args.common.build_tracing_config_dry_run(args.dry_run)
}
Cmd::GetBucketAccelerateConfiguration(args) => args.common.build_tracing_config(),
Cmd::PutBucketAccelerateConfiguration(args) => {
args.common.build_tracing_config_dry_run(args.dry_run)
}
Cmd::GetBucketRequestPayment(args) => args.common.build_tracing_config(),
Cmd::PutBucketRequestPayment(args) => {
args.common.build_tracing_config_dry_run(args.dry_run)
}
Cmd::GetBucketPolicyStatus(args) => args.common.build_tracing_config(),
Cmd::RestoreObject(args) => args.common.build_tracing_config_dry_run(args.dry_run),
Cmd::Presign(args) => args.common.build_tracing_config(),
};
if let Some(tc) = tc {
util_bin::tracing_init::init_tracing(&tc);
}
}