use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EngineConfig {
pub pack_paths: Vec<PathBuf>,
pub font_paths: Vec<PathBuf>,
pub use_embedded_fonts: bool,
pub use_system_fonts: bool,
pub cache_dir: Option<PathBuf>,
}
impl Default for EngineConfig {
fn default() -> Self {
Self {
pack_paths: vec![
PathBuf::from("./packs"),
PathBuf::from("~/.renderreport/packs"),
],
font_paths: vec![],
use_embedded_fonts: true,
use_system_fonts: true,
cache_dir: None,
}
}
}
impl EngineConfig {
pub fn builder() -> EngineConfigBuilder {
EngineConfigBuilder::default()
}
pub fn add_pack_path(&mut self, path: impl Into<PathBuf>) {
self.pack_paths.push(path.into());
}
pub fn add_font_path(&mut self, path: impl Into<PathBuf>) {
self.font_paths.push(path.into());
}
}
#[derive(Default)]
pub struct EngineConfigBuilder {
config: EngineConfig,
}
impl EngineConfigBuilder {
pub fn pack_path(mut self, path: impl Into<PathBuf>) -> Self {
self.config.pack_paths.push(path.into());
self
}
pub fn font_path(mut self, path: impl Into<PathBuf>) -> Self {
self.config.font_paths.push(path.into());
self
}
pub fn use_embedded_fonts(mut self, value: bool) -> Self {
self.config.use_embedded_fonts = value;
self
}
pub fn use_system_fonts(mut self, value: bool) -> Self {
self.config.use_system_fonts = value;
self
}
pub fn cache_dir(mut self, path: impl Into<PathBuf>) -> Self {
self.config.cache_dir = Some(path.into());
self
}
pub fn build(self) -> EngineConfig {
self.config
}
}