use std::{fs, path::PathBuf};
use anyhow::Result;
use dragonstub::DragonStubConfig;
use grub::GrubConfig;
use hypervisor::qemu::QemuConfig;
use metadata::BootMetadata;
use serde::Deserialize;
use uboot::UbootConfig;
pub mod dragonstub;
pub mod grub;
pub mod hypervisor;
pub mod metadata;
pub mod uboot;
#[derive(Debug, Clone, Deserialize)]
pub struct BootConfigFile {
pub metadata: BootMetadata,
pub grub: Option<GrubConfig>,
pub dragonstub: Option<DragonStubConfig>,
pub uboot: Option<UbootConfig>,
pub qemu: Option<QemuConfig>,
}
impl BootConfigFile {
pub fn load(path: &PathBuf) -> Result<Self> {
let content = fs::read_to_string(path)?;
Self::load_from_str(&content)
}
pub fn load_from_str(content: &str) -> Result<Self> {
let config: BootConfigFile = toml::from_str(content)?;
Ok(config)
}
}