s3util-rs 1.4.0

Tools for managing Amazon S3 objects and buckets
Documentation
use anyhow::Result;
use tracing::info;

use s3util_rs::config::ClientConfig;
use s3util_rs::config::args::rm::RmArgs;
use s3util_rs::storage::s3::api;

/// Runtime entry for `s3util rm s3://<BUCKET>/<KEY>`.
///
/// Builds the SDK client from `client_config`, issues `DeleteObject`,
/// and returns `Ok(())` on success (silent — no output).
pub async fn run_rm(args: RmArgs, client_config: ClientConfig) -> Result<()> {
    let (bucket, key) = args
        .bucket_key()
        .map_err(|e| anyhow::anyhow!("{}", e.trim_end()))?;

    let client = client_config.create_client().await;

    if args.dry_run {
        info!(
            bucket = %bucket,
            key = %key,
            version_id = %args.source_version_id.as_deref().unwrap_or_default(),
            "[dry-run] would delete object."
        );
        return Ok(());
    }

    api::delete_object(&client, &bucket, &key, args.source_version_id.as_deref()).await?;
    info!(
        bucket = %bucket,
        key = %key,
        version_id = %args.source_version_id.as_deref().unwrap_or_default(),
        "Object deleted."
    );
    Ok(())
}