use crate::exit_code::ExitCode;
use clap::Parser;
use efivar::VarManager;
use itertools::Itertools;
use crate::id::BootEntryId;
pub mod add;
pub mod get;
pub mod remove;
pub mod set;
#[cfg(test)]
mod tests;
#[derive(Parser)]
pub enum OrderCommand {
Get,
Add {
#[arg(value_name = "ID")]
id: BootEntryId,
#[arg(short, long, value_name = "POSITION")]
position: Option<usize>,
},
#[command(alias = "del")]
#[command(alias = "delete")]
Remove {
#[arg(value_name = "ID")]
id: BootEntryId,
#[arg(long)]
force: bool,
},
Set {
ids: Vec<BootEntryId>,
},
}
pub fn run(manager: &mut dyn VarManager, cmd: OrderCommand) -> ExitCode {
match cmd {
OrderCommand::Get => get::run(manager),
OrderCommand::Add { id, position } => add::run(manager, id.0, position),
OrderCommand::Remove { id, force } => remove::run(manager, id.0, force),
OrderCommand::Set { ids } => {
set::run(manager, ids.into_iter().map(|id| id.0).collect_vec())
}
}
}
fn boot_order_str(ids: &[u16]) -> String {
ids.iter().map(|id| format!("{id:04X}")).join(" ")
}