use crate::css::Css;
use std::time::Duration;
pub trait HotReloadHandler {
fn reload_style(&self) -> Result<Css, String>;
fn get_reload_interval(&self) -> Duration;
}
pub struct HotReloadOverrideHandler {
pub base_style: Css,
pub hot_reloader: Box<dyn HotReloadHandler>,
}
impl HotReloadOverrideHandler {
pub fn new(base_style: Css, hot_reloader: Box<dyn HotReloadHandler>) -> Self {
Self {
base_style,
hot_reloader,
}
}
}
impl HotReloadHandler for HotReloadOverrideHandler {
fn reload_style(&self) -> Result<Css, String> {
let mut css = Css::empty();
for stylesheet in self.base_style.clone().stylesheets {
css.append_stylesheet(stylesheet);
}
for stylesheet in self.hot_reloader.reload_style()?.stylesheets {
css.append_stylesheet(stylesheet);
}
Ok(css)
}
fn get_reload_interval(&self) -> Duration {
self.hot_reloader.get_reload_interval()
}
}