use alloc::{sync::Arc, vec::Vec};
use miden_assembly_syntax::{Library, library::ModuleInfo};
use miden_core::mast::MastForest;
use miden_mast_package::Package;
use miden_project::Linkage;
pub use miden_project::Linkage as LinkLibraryKind;
#[derive(Clone)]
pub struct LinkLibrary {
pub mast: Arc<MastForest>,
pub module_infos: Vec<ModuleInfo>,
pub linkage: Linkage,
}
impl LinkLibrary {
pub fn from_package(package: Arc<Package>) -> Self {
let mast = package.mast.mast_forest().clone();
let module_infos = package
.mast
.module_infos()
.map(|mut mi| {
mi.set_version(package.version.clone());
mi
})
.collect();
Self {
mast,
module_infos,
linkage: Linkage::Dynamic,
}
}
pub(crate) fn from_library(library: &Library) -> Self {
let mast = library.mast_forest().clone();
let module_infos = library.module_infos().collect();
Self {
mast,
module_infos,
linkage: Linkage::Dynamic,
}
}
pub fn with_linkage(mut self, linkage: Linkage) -> Self {
self.linkage = linkage;
self
}
}