use avml::{BlobUploader, Result, put};
use clap::{Parser, Subcommand};
use core::num::{NonZeroU64, NonZeroUsize};
use std::path::PathBuf;
use url::Url;
#[derive(Parser)]
#[command(version)]
struct Cmd {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
Put {
filename: PathBuf,
url: Url,
},
UploadBlob {
filename: PathBuf,
url: Url,
#[arg(long)]
sas_block_concurrency: Option<NonZeroUsize>,
#[arg(long)]
sas_block_size: Option<NonZeroU64>,
},
}
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<()> {
let cmd = Cmd::parse();
match cmd.command {
Commands::Put { filename, url } => put(&filename, &url).await?,
Commands::UploadBlob {
filename,
url,
sas_block_size,
sas_block_concurrency,
} => {
let uploader = BlobUploader::new(&url)?
.block_size(sas_block_size)
.concurrency(sas_block_concurrency);
uploader.upload_file(&filename).await?;
}
}
Ok(())
}