use anyhow::Result;
use s3util_rs::config::ClientConfig;
use s3util_rs::config::args::get_bucket_lifecycle_configuration::GetBucketLifecycleConfigurationArgs;
use s3util_rs::output::json::get_bucket_lifecycle_configuration_to_json;
use s3util_rs::storage::s3::api::{self, HeadError};
use super::ExitStatus;
pub async fn run_get_bucket_lifecycle_configuration(
args: GetBucketLifecycleConfigurationArgs,
client_config: ClientConfig,
) -> Result<ExitStatus> {
let bucket = args
.bucket_name()
.map_err(|e| anyhow::anyhow!("{}", e.trim_end()))?;
let client = client_config.create_client().await;
match api::get_bucket_lifecycle_configuration(&client, &bucket).await {
Ok(out) => {
let json = get_bucket_lifecycle_configuration_to_json(&out);
let pretty = serde_json::to_string_pretty(&json)?;
println!("{pretty}");
Ok(ExitStatus::Success)
}
Err(HeadError::BucketNotFound) => {
tracing::error!("bucket s3://{bucket} not found");
Ok(ExitStatus::NotFound)
}
Err(HeadError::NotFound) => {
tracing::error!("lifecycle configuration for s3://{bucket} not found");
Ok(ExitStatus::NotFound)
}
Err(HeadError::Other(e)) => Err(e),
}
}