use super::ImageBuilder;
use crate::bootloader::FileEntry;
use crate::config::BootType;
use crate::core::context::Context;
use crate::core::error::Result;
use crate::util::fs::{copy_file, ensure_dir_exists};
use std::path::PathBuf;
pub struct DirectoryBuilder;
impl DirectoryBuilder {
pub fn new() -> Self {
Self
}
}
impl Default for DirectoryBuilder {
fn default() -> Self {
Self::new()
}
}
impl ImageBuilder for DirectoryBuilder {
fn build(&self, ctx: &Context, files: &[FileEntry]) -> Result<PathBuf> {
let output = self.output_path(ctx);
if output.exists() {
std::fs::remove_dir_all(&output)?;
}
ensure_dir_exists(&output)?;
for file in files {
let dest = output.join(&file.dest);
copy_file(&file.source, &dest)?;
}
Ok(output)
}
fn output_path(&self, ctx: &Context) -> PathBuf {
ctx.output_dir.join("esp")
}
fn supported_boot_types(&self) -> &[BootType] {
&[BootType::Bios, BootType::Uefi, BootType::Hybrid]
}
fn name(&self) -> &str {
"Directory"
}
}