miden_assembly/linker/
library.rs1use alloc::{sync::Arc, vec::Vec};
2
3use miden_assembly_syntax::{Library, library::ModuleInfo};
4use miden_core::mast::MastForest;
5use miden_mast_package::Package;
6use miden_project::Linkage;
7pub use miden_project::Linkage as LinkLibraryKind;
9
10#[derive(Clone)]
13pub struct LinkLibrary {
14 pub mast: Arc<MastForest>,
16 pub module_infos: Vec<ModuleInfo>,
18 pub linkage: Linkage,
20}
21
22impl LinkLibrary {
23 pub fn from_package(package: Arc<Package>) -> Self {
25 let mast = package.mast.mast_forest().clone();
26 let module_infos = package
27 .mast
28 .module_infos()
29 .map(|mut mi| {
30 mi.set_version(package.version.clone());
31 mi
32 })
33 .collect();
34 Self {
35 mast,
36 module_infos,
37 linkage: Linkage::Dynamic,
38 }
39 }
40
41 pub(crate) fn from_library(library: &Library) -> Self {
42 let mast = library.mast_forest().clone();
43 let module_infos = library.module_infos().collect();
44 Self {
45 mast,
46 module_infos,
47 linkage: Linkage::Dynamic,
48 }
49 }
50
51 pub fn with_linkage(mut self, linkage: Linkage) -> Self {
53 self.linkage = linkage;
54 self
55 }
56}