use std::path::{Path, PathBuf};
use std::process;
use clap::{Parser, Subcommand};
mod commands;
#[derive(Parser)]
#[command(name = "fidius", about = "Fidius plugin framework CLI", version)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
InitInterface {
name: String,
#[arg(long = "trait")]
trait_name: String,
#[arg(long)]
path: Option<PathBuf>,
#[arg(long)]
version: Option<String>,
},
InitPlugin {
name: String,
#[arg(long)]
interface: String,
#[arg(long = "trait")]
trait_name: String,
#[arg(long)]
path: Option<PathBuf>,
#[arg(long)]
version: Option<String>,
},
Keygen {
#[arg(long)]
out: String,
},
Sign {
#[arg(long)]
key: PathBuf,
dylib: PathBuf,
},
Verify {
#[arg(long)]
key: PathBuf,
dylib: PathBuf,
},
Inspect {
dylib: PathBuf,
},
}
fn main() {
let cli = Cli::parse();
let result = match cli.command {
Commands::InitInterface {
name,
trait_name,
path,
version,
} => commands::init_interface(&name, &trait_name, path.as_deref(), version.as_deref()),
Commands::InitPlugin {
name,
interface,
trait_name,
path,
version,
} => commands::init_plugin(
&name,
&interface,
&trait_name,
path.as_deref(),
version.as_deref(),
),
Commands::Keygen { out } => commands::keygen(&out),
Commands::Sign { key, dylib } => commands::sign(&key, &dylib),
Commands::Verify { key, dylib } => commands::verify(&key, &dylib),
Commands::Inspect { dylib } => commands::inspect(&dylib),
};
if let Err(e) = result {
eprintln!("error: {e}");
process::exit(1);
}
}