use crate::HostCallFlags;
use crate::cmds::accounts::get_current_account;
use clap::Subcommand;
use tracing::instrument;
#[derive(Subcommand, Debug)]
pub enum Assets {
Write {
#[command(flatten)]
host: HostCallFlags,
#[arg(short, long)]
name: Option<String>,
},
Prune {
#[command(flatten)]
host: HostCallFlags,
},
#[clap(visible_aliases(["del"]))]
Delete {
#[command(flatten)]
host: HostCallFlags,
#[arg(long, value_delimiter = ',', num_args = 1..)]
skip: Option<Vec<String>>,
},
}
impl Assets {
#[instrument(skip_all, name = "assets")]
pub async fn handle(&self, project: &str) -> anyhow::Result<()> {
match self {
Self::Write { name, host } => {
let account = get_current_account(host.insecure)?;
let client = host.client(&account)?;
if let Some(name) = name {
client.assets_write(project, name).await?;
} else {
client.assets_write_all(project).await?;
}
}
Self::Prune { host } => {
let account = get_current_account(host.insecure)?;
let client = host.client(&account)?;
client.assets_prune(project).await?;
}
Self::Delete { skip, host } => {
let account = get_current_account(host.insecure)?;
let client = host.client(&account)?;
client
.assets_delete_all(project, skip.clone().unwrap_or_default())
.await?;
}
}
Ok(())
}
}