use std::{fmt::Debug, path::PathBuf};
use clap::Parser;
use miette::{miette, Result};
use crate::{
files::{decrypt_file, remove_age_ext},
keys::KeyArgs,
};
#[derive(Debug, Clone, Parser)]
pub struct DecryptArgs {
pub input: PathBuf,
#[arg(short, long)]
pub output: Option<PathBuf>,
#[command(flatten)]
#[allow(missing_docs, reason = "don't interfere with clap")]
pub key: KeyArgs,
}
pub async fn run(
DecryptArgs {
ref input,
output,
key,
}: DecryptArgs,
) -> Result<()> {
let secret_key = key.require_secret_key().await?;
let output = if let Some(ref path) = output {
path.to_owned()
} else {
remove_age_ext(input)
.map_err(|_| miette!("Cannot guess output path, use --output to set one"))?
};
decrypt_file(input, output, secret_key).await?;
Ok(())
}