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}