support for configuration files

This commit is contained in:
2025-10-01 18:25:49 -07:00
parent 17ca11f239
commit 3fdaad42ad
9 changed files with 176 additions and 8 deletions

33
src/config.rs Normal file
View File

@@ -0,0 +1,33 @@
use serde::{Deserialize, Serialize};
use uefi::cstr16;
use uefi::fs::{FileSystem, Path};
use uefi::proto::media::fs::SimpleFileSystem;
#[derive(Serialize, Deserialize, Default)]
pub struct RootConfiguration {
#[serde(default)]
pub modules: Vec<ModuleConfiguration>,
}
#[derive(Serialize, Deserialize, Default)]
pub struct ModuleConfiguration {
#[serde(default)]
pub chainloader: Option<ChainloaderConfiguration>,
}
#[derive(Serialize, Deserialize, Default)]
pub struct ChainloaderConfiguration {
pub path: String,
}
pub fn load() -> RootConfiguration {
let fs = uefi::boot::open_protocol_exclusive::<SimpleFileSystem>(
uefi::boot::get_handle_for_protocol::<SimpleFileSystem>().expect("no filesystem protocol"),
)
.expect("unable to open filesystem protocol");
let mut fs = FileSystem::new(fs);
let content = fs
.read(Path::new(cstr16!("sprout.toml")))
.expect("unable to read sprout.toml file");
toml::from_slice(&content).expect("unable to parse sprout.toml file")
}