use alloc::vec::Vec;
use uefi::Handle;
use crate::{config::Config, features, system::fs::UefiFileSystem};
pub mod bls;
pub mod fallback;
pub mod osx;
pub mod shell;
pub mod uki;
pub mod windows;
#[derive(Clone, Copy, Debug)]
pub enum Parsers {
Bls,
Fallback,
Osx,
Shell,
Uki,
Windows,
Special,
}
impl Parsers {
#[must_use = "Has no effect if the result is unused"]
pub const fn as_str(self) -> &'static str {
match self {
Self::Bls => "bls",
Self::Fallback => "fallback",
Self::Osx => "osx",
Self::Shell => "shell",
Self::Uki => "uki",
Self::Windows => "windows",
Self::Special => "special",
}
}
}
pub trait ConfigParser {
fn parse_configs(fs: &mut UefiFileSystem, handle: Handle, configs: &mut Vec<Config>);
}
pub(super) fn parse_all_configs(
fs: &mut UefiFileSystem,
handle: Handle,
configs: &mut Vec<Config>,
) {
features::bls::BlsConfig::parse_configs(fs, handle, configs);
features::fallback::FallbackConfig::parse_configs(fs, handle, configs);
features::osx::OsxConfig::parse_configs(fs, handle, configs);
features::shell::ShellConfig::parse_configs(fs, handle, configs);
features::uki::UkiConfig::parse_configs(fs, handle, configs);
features::windows::WinConfig::parse_configs(fs, handle, configs);
}