1use crate::{Guard, HotReloadGuard, HotReloadModule, Module, StaticGuard, StaticModule};
2use core::ops::Deref;
3
4pub enum UniversalModule {
6 HotReload(&'static HotReloadModule),
8 Static(StaticModule),
10}
11
12impl<'a> Module<'a> for UniversalModule {
13 type Guard = UniversalGuard;
14
15 fn bytecode(&'a self) -> Self::Guard {
16 match self {
17 Self::HotReload(module) => UniversalGuard::HotReload(module.bytecode()),
18 Self::Static(module) => UniversalGuard::Static(module.bytecode()),
19 }
20 }
21}
22
23pub enum UniversalGuard {
25 HotReload(HotReloadGuard),
27 Static(StaticGuard),
29}
30
31impl Deref for UniversalGuard {
32 type Target = [u8];
33
34 fn deref(&self) -> &Self::Target {
35 match self {
36 Self::HotReload(guard) => guard,
37 Self::Static(guard) => guard,
38 }
39 }
40}
41
42impl Guard for UniversalGuard {}