use crate::MdbClient;
use std::process::ExitCode;
use anyhow::{Context, Result};
use clap::Parser;
#[derive(Parser, Clone, Debug, PartialEq)]
pub struct RetrieveSample {
pub hash: String,
#[arg(long, action, default_value_t = false)]
pub cart: bool,
}
impl RetrieveSample {
pub async fn exec(&self, config: &MdbClient) -> Result<ExitCode> {
let _bytes = hex::decode(&self.hash).context("Provided hash wasn't valid hexidecimal")?;
let file_name = if self.cart {
format!("{}.cart", self.hash)
} else {
self.hash.clone()
};
let contents = config
.retrieve(&self.hash, self.cart)
.await
.context("failed to retrieve sample")?;
std::fs::write(&file_name, contents).context("failed to write file to disk")?;
Ok(ExitCode::SUCCESS)
}
}
#[test]
fn verify_cli() {
use clap::CommandFactory;
RetrieveSample::command().debug_assert();
}