use std::{fmt::Debug, path::PathBuf};
use clap::Parser;
use miette::{IntoDiagnostic, Result, WrapErr};
use tokio::fs::remove_file;
use crate::{
files::{append_age_ext, encrypt_file},
keys::KeyArgs,
};
#[derive(Debug, Clone, Parser)]
pub struct EncryptArgs {
pub input: PathBuf,
#[arg(short, long)]
pub output: Option<PathBuf>,
#[arg(long = "rm")]
pub remove: bool,
#[command(flatten)]
#[allow(missing_docs, reason = "don't interfere with clap")]
pub key: KeyArgs,
}
pub async fn run(
EncryptArgs {
ref input,
output,
key,
remove,
}: EncryptArgs,
) -> Result<()> {
let public_key = key.require_public_key().await?;
let output = output.unwrap_or_else(|| append_age_ext(input));
encrypt_file(input, output, public_key).await?;
if remove {
remove_file(input)
.await
.into_diagnostic()
.wrap_err("deleting input file")?;
}
Ok(())
}