use crate::{Guard, HotReloadGuard, HotReloadModule, Module, StaticGuard, StaticModule};
use core::ops::Deref;
#[allow(clippy::large_enum_variant)]
pub enum UniversalModule {
HotReload(HotReloadModule),
Static(StaticModule),
}
impl UniversalModule {
pub const fn from_bytecode(bytecode: &'static [u8]) -> Self {
Self::Static(StaticModule::new(bytecode))
}
pub const fn from_hot_reload_path(path: &'static str) -> Self {
Self::HotReload(HotReloadModule::new(path))
}
}
impl Module<'static> for UniversalModule {
type Guard = UniversalGuard;
fn bytecode(&'static self) -> Self::Guard {
match self {
Self::HotReload(module) => UniversalGuard::HotReload(module.bytecode()),
Self::Static(module) => UniversalGuard::Static(module.bytecode()),
}
}
}
pub enum UniversalGuard {
HotReload(HotReloadGuard),
Static(StaticGuard),
}
impl Deref for UniversalGuard {
type Target = [u8];
fn deref(&self) -> &Self::Target {
match self {
Self::HotReload(guard) => guard,
Self::Static(guard) => guard,
}
}
}
impl Guard for UniversalGuard {}