use clap::{Args, Subcommand};
use std::path::PathBuf;
#[derive(Debug, Subcommand)]
pub enum AssymCommand {
#[command(visible_alias = "encode")]
Encrypt(AssymEncryptArgs),
#[command(visible_alias = "decode")]
Decrypt(AssymDecryptArgs),
Sign(AssymSignArgs),
}
#[derive(Debug, Args)]
pub struct AssymEncryptArgs {
#[arg(value_name = "INPUT")]
pub input: PathBuf,
#[arg(long, short = 'o', value_name = "FILE")]
pub output: Option<PathBuf>,
#[arg(long = "recipient-public", short = 'r', value_name = "FILE")]
pub recipient_public: Option<PathBuf>,
#[arg(long = "keys-dir", short = 'k', value_name = "DIR")]
pub keys_dir: Option<PathBuf>,
#[arg(long, short = 's')]
pub sign: bool,
#[arg(long = "sign-key", short = 'S', value_name = "FILE")]
pub sign_key: Option<PathBuf>,
#[arg(long, short = 'f')]
pub force: bool,
}
#[derive(Debug, Args)]
pub struct AssymDecryptArgs {
#[arg(value_name = "INPUT.bin")]
pub input: PathBuf,
#[arg(long, short = 'o', value_name = "FILE")]
pub output: Option<PathBuf>,
#[arg(long, short = 'i', value_name = "FILE")]
pub identity: Option<PathBuf>,
#[arg(long = "keys-dir", short = 'k', value_name = "DIR")]
pub keys_dir: Option<PathBuf>,
#[arg(long, short = 'v', value_name = "FILE")]
pub verify: Option<PathBuf>,
#[arg(long = "require-signature", short = 'R')]
pub require_signature: bool,
#[arg(long, short = 'f')]
pub force: bool,
}
#[derive(Debug, Args)]
pub struct AssymSignArgs {
#[arg(value_name = "INPUT.bin")]
pub input: PathBuf,
#[arg(long, short = 'o', value_name = "FILE")]
pub output: Option<PathBuf>,
#[arg(long = "sign-key", short = 'S', value_name = "FILE")]
pub sign_key: Option<PathBuf>,
#[arg(long = "keys-dir", short = 'k', value_name = "DIR")]
pub keys_dir: Option<PathBuf>,
#[arg(long, short = 'e')]
pub embed: bool,
#[arg(long, short = 'f')]
pub force: bool,
}