1use crate::{Guard, HotReloadGuard, HotReloadModule, Module, StaticGuard, StaticModule};
2use core::ops::Deref;
3
4#[allow(clippy::large_enum_variant)]
6pub enum UniversalModule {
7 HotReload(HotReloadModule),
9 Static(StaticModule),
11}
12
13impl UniversalModule {
14 pub const fn from_bytecode(bytecode: &'static [u8]) -> Self {
16 Self::Static(StaticModule::new(bytecode))
17 }
18
19 pub const fn from_hot_reload_path(path: &'static str) -> Self {
21 Self::HotReload(HotReloadModule::new(path))
22 }
23}
24
25impl Module<'static> for UniversalModule {
26 type Guard = UniversalGuard;
27
28 fn bytecode(&'static self) -> Self::Guard {
29 match self {
30 Self::HotReload(module) => UniversalGuard::HotReload(module.bytecode()),
31 Self::Static(module) => UniversalGuard::Static(module.bytecode()),
32 }
33 }
34}
35
36pub enum UniversalGuard {
38 HotReload(HotReloadGuard),
40 Static(StaticGuard),
42}
43
44impl Deref for UniversalGuard {
45 type Target = [u8];
46
47 fn deref(&self) -> &Self::Target {
48 match self {
49 Self::HotReload(guard) => guard,
50 Self::Static(guard) => guard,
51 }
52 }
53}
54
55impl Guard for UniversalGuard {}