use std::sync::Arc;
use miden_protocol::assembly::Package;
use miden_protocol::assembly::mast::MastForest;
use miden_protocol::utils::sync::LazyLock;
static XRESERVE_PACKAGE: LazyLock<Arc<Package>> = LazyLock::new(|| {
Arc::new(
Package::read_from_bytes_trusted(include_bytes!(concat!(
env!("OUT_DIR"),
"/assets/xreserve.masp"
)))
.expect("the shipped xreserve package deserializes"),
)
});
#[derive(Clone)]
pub struct XReserveLibrary(Arc<Package>);
impl XReserveLibrary {
pub fn package(&self) -> Arc<Package> {
self.0.clone()
}
pub fn mast_forest(&self) -> &Arc<MastForest> {
self.0.mast_forest()
}
}
impl AsRef<Package> for XReserveLibrary {
fn as_ref(&self) -> &Package {
self.0.as_ref()
}
}
impl From<XReserveLibrary> for Package {
fn from(value: XReserveLibrary) -> Self {
Arc::unwrap_or_clone(value.0)
}
}
impl Default for XReserveLibrary {
fn default() -> Self {
Self(XRESERVE_PACKAGE.clone())
}
}