efivar 2.0.0

Rust crate for manipulating EFI variables using the OS interface.
Documentation
//! This module contains functions to write boot entries

use crate::{
    boot::BootVarName,
    efi::{Variable, VariableFlags},
    VarWriter,
};

use super::BootEntry;

pub trait BootVarWriter {
    fn add_boot_entry(&mut self, id: u16, entry: BootEntry) -> crate::Result<()>;
    fn set_boot_order(&mut self, ids: Vec<u16>) -> crate::Result<()>;
}

impl<T: VarWriter> BootVarWriter for T {
    fn set_boot_order(&mut self, ids: Vec<u16>) -> crate::Result<()> {
        let bytes: Vec<u8> = ids.into_iter().flat_map(|id| id.to_le_bytes()).collect();

        self.write(
            &Variable::new("BootOrder"),
            VariableFlags::default(),
            &bytes,
        )?;

        Ok(())
    }

    fn add_boot_entry(&mut self, id: u16, entry: BootEntry) -> crate::Result<()> {
        let bytes = entry.to_bytes();

        self.write(
            &Variable::new(&id.boot_var_name()),
            VariableFlags::default(),
            &bytes,
        )?;

        Ok(())
    }
}