use clap::Parser;
use fpgad_cli::{
Cli, Commands, dfx_mgr::dfx_mgr_handler, load::load_handler, remove::remove_handler,
set::set_handler, status::status_handler, xlnx_sys::xlnx_sys_handler,
};
use log::{debug, error};
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
env_logger::init();
let cli = Cli::parse();
debug!("parsed cli command with {cli:#?}");
if let Commands::Completions { shell } = cli.command() {
let mut cmd = <Cli as clap::CommandFactory>::command();
let bin_name = cmd.get_name().to_string();
clap_complete::generate(*shell, &mut cmd, bin_name, &mut std::io::stdout());
return Ok(());
}
let result = match cli.command() {
Commands::Load { command } => load_handler(cli.platform(), cli.device(), command).await,
Commands::Remove { command } => remove_handler(cli.platform(), cli.device(), command).await,
Commands::Set { attribute, value } => {
set_handler(cli.platform(), cli.device(), attribute, value).await
}
Commands::Status => status_handler(cli.platform(), cli.device()).await,
Commands::XlnxSys { command } => xlnx_sys_handler(command).await,
Commands::DfxMgr { cmd } => dfx_mgr_handler(cmd).await,
Commands::Completions { .. } => unreachable!(),
};
match result {
Ok(msg) => {
println!("{msg}");
Ok(())
}
Err(e) => {
error!("{e}");
Err(e.into())
}
}
}