use anyhow::Result;
use tracing::info;
use s3util_rs::config::ClientConfig;
use s3util_rs::config::args::get_bucket_versioning::GetBucketVersioningArgs;
use s3util_rs::output::json::get_bucket_versioning_to_json;
use s3util_rs::storage::s3::api::{self, HeadError};
use super::ExitStatus;
pub async fn run_get_bucket_versioning(
args: GetBucketVersioningArgs,
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_versioning(&client, &bucket).await {
Ok(out) => {
let json = get_bucket_versioning_to_json(&out);
if json.as_object().is_some_and(|m| m.is_empty()) {
info!(bucket = %bucket, "Bucket versioning not configured.");
} else {
let pretty = serde_json::to_string_pretty(&json)?;
println!("{pretty}");
}
Ok(ExitStatus::Success)
}
Err(HeadError::BucketNotFound) | Err(HeadError::NotFound) => {
tracing::error!("bucket s3://{bucket} not found");
Ok(ExitStatus::NotFound)
}
Err(HeadError::Other(e)) => Err(e),
}
}