use std::io::{self, Read};
use std::path::Path;
use serde::Serialize;
use void_core::cid;
use crate::output::{run_command, CliError, CliOptions};
#[derive(Debug)]
pub struct CreateCidArgs {
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateCidOutput {
pub cid: String,
pub input_size: usize,
}
pub fn run(_cwd: &Path, _args: CreateCidArgs, opts: &CliOptions) -> Result<(), CliError> {
run_command("create-cid", opts, |ctx| {
ctx.progress("Reading input...");
let mut input = Vec::new();
io::stdin()
.read_to_end(&mut input)
.map_err(|e| CliError::io_error(format!("failed to read stdin: {}", e)))?;
let input_size = input.len();
let created_cid = cid::create(&input);
let cid_str = created_cid.to_string();
if !ctx.use_json() {
println!("{}", cid_str);
}
Ok(CreateCidOutput {
cid: cid_str,
input_size,
})
})
}