Skip to main content

geam_core/plan/
host.rs

1mod function;
2mod implementation;
3mod module;
4
5use super::{FunctionTemplateId, ModuleId};
6use crate::host::HostProfile;
7
8pub use function::HostFunctionTemplate;
9pub(crate) use implementation::HostImplementationBinding;
10pub(crate) use module::HostedPlannedModuleParts;
11pub use module::{HostedFunctionTemplate, HostedPlannedModule};
12
13pub struct HostedModulePlan<Profile: HostProfile> {
14    root: ModuleId,
15    entry: FunctionTemplateId,
16    modules: Vec<HostedPlannedModule>,
17    implementation_bindings: Vec<HostImplementationBinding<Profile>>,
18}
19
20pub(crate) struct HostedModulePlanParts<Profile: HostProfile> {
21    pub(crate) root: ModuleId,
22    pub(crate) entry: FunctionTemplateId,
23    pub(crate) modules: Vec<HostedPlannedModule>,
24    pub(crate) implementation_bindings: Vec<HostImplementationBinding<Profile>>,
25}
26
27impl<Profile: HostProfile> HostedModulePlan<Profile> {
28    pub(crate) fn new(
29        root: ModuleId,
30        entry: FunctionTemplateId,
31        modules: Vec<HostedPlannedModule>,
32        implementation_bindings: Vec<HostImplementationBinding<Profile>>,
33    ) -> Self {
34        Self {
35            root,
36            entry,
37            modules,
38            implementation_bindings,
39        }
40    }
41
42    pub fn root(&self) -> ModuleId {
43        self.root
44    }
45
46    pub fn entry(&self) -> FunctionTemplateId {
47        self.entry
48    }
49
50    pub fn modules(&self) -> &[HostedPlannedModule] {
51        &self.modules
52    }
53
54    pub(crate) fn into_parts(self) -> HostedModulePlanParts<Profile> {
55        HostedModulePlanParts {
56            root: self.root,
57            entry: self.entry,
58            modules: self.modules,
59            implementation_bindings: self.implementation_bindings,
60        }
61    }
62}