miden_mast_package/dependency/
resolver.rs1use alloc::{collections::BTreeMap, sync::Arc};
2
3use miden_assembly_syntax::Library;
4
5use crate::{Dependency, Package, Word};
6
7#[derive(Debug, Clone)]
14pub enum ResolvedDependency {
15 Local(LocalResolvedDependency),
17}
18
19impl From<Arc<Library>> for ResolvedDependency {
20 fn from(library: Arc<Library>) -> Self {
21 Self::Local(LocalResolvedDependency::Library(library))
22 }
23}
24
25impl From<Arc<Package>> for ResolvedDependency {
26 fn from(package: Arc<Package>) -> Self {
27 Self::Local(LocalResolvedDependency::Package(package))
28 }
29}
30
31#[derive(Debug, Clone)]
33pub enum LocalResolvedDependency {
34 Library(Arc<Library>),
35 Package(Arc<Package>),
36}
37
38impl From<Arc<Library>> for LocalResolvedDependency {
39 fn from(library: Arc<Library>) -> Self {
40 Self::Library(library)
41 }
42}
43
44impl From<Arc<Package>> for LocalResolvedDependency {
45 fn from(package: Arc<Package>) -> Self {
46 Self::Package(package)
47 }
48}
49
50pub trait DependencyResolver {
54 fn resolve(&self, dependency: &Dependency) -> Option<ResolvedDependency>;
55}
56
57#[derive(Debug, Default)]
58pub struct MemDependencyResolverByDigest {
59 resolved: BTreeMap<Word, ResolvedDependency>,
60}
61
62impl MemDependencyResolverByDigest {
63 pub fn add(&mut self, digest: Word, resolution: ResolvedDependency) {
64 self.resolved.insert(digest, resolution);
65 }
66}
67
68impl DependencyResolver for MemDependencyResolverByDigest {
69 fn resolve(&self, dependency: &Dependency) -> Option<ResolvedDependency> {
70 self.resolved.get(&dependency.digest).cloned()
71 }
72}