58 lines
1.5 KiB
Rust
Executable File
58 lines
1.5 KiB
Rust
Executable File
use crate::app_interface::StaticData;
|
|
use crate::handling::cached_value::CachedValue;
|
|
use crate::handling::Cacheable;
|
|
use crate::{cached_value, ExternRef, ExternalReferenceType};
|
|
use alloc::rc::Rc;
|
|
|
|
struct DynamicLibraryInner {
|
|
ptr: ExternRef<DynamicLibrary>,
|
|
static_data: CachedValue<StaticData>,
|
|
}
|
|
|
|
#[derive(Clone)]
|
|
pub struct DynamicLibrary {
|
|
inner: Rc<DynamicLibraryInner>,
|
|
}
|
|
|
|
crate::handling::cacheable::cacheable!(DynamicLibrary);
|
|
|
|
impl DynamicLibrary {
|
|
#[cfg(not(feature = "mock_data"))]
|
|
pub(crate) fn new(ptr: ExternRef<Self>) -> Self {
|
|
Self::from_ref(ptr, &|ptr| Self {
|
|
inner: Rc::new(DynamicLibraryInner {
|
|
ptr,
|
|
static_data: cached_value!({
|
|
dynamic_library_get_static_data(ptr).get_value().unwrap()
|
|
}),
|
|
}),
|
|
})
|
|
}
|
|
|
|
#[cfg(feature = "mock_data")]
|
|
pub fn new(data: StaticData) -> Self {
|
|
Self {
|
|
inner: Rc::new(DynamicLibraryInner {
|
|
ptr: ExternRef::mock(),
|
|
static_data: data.into(),
|
|
}),
|
|
}
|
|
}
|
|
|
|
pub fn data_library(&self) -> StaticData {
|
|
self.inner.static_data.value()
|
|
}
|
|
}
|
|
|
|
#[cfg(not(feature = "mock_data"))]
|
|
impl ExternalReferenceType for DynamicLibrary {
|
|
fn from_extern_value(reference: ExternRef<Self>) -> Self {
|
|
DynamicLibrary::new(reference)
|
|
}
|
|
}
|
|
|
|
#[cfg(not(feature = "mock_data"))]
|
|
extern "wasm" {
|
|
fn dynamic_library_get_static_data(ptr: ExternRef<DynamicLibrary>) -> ExternRef<StaticData>;
|
|
}
|