1 /// A summary of the amount of resources required to instantiate a particular
2 /// [`Module`][crate::Module] or [`Component`][crate::component::Component].
3 ///
4 /// Example uses of this information:
5 ///
6 /// * Determining whether your pooling allocator configuration supports
7 ///   instantiating this module.
8 ///
9 /// * Deciding how many of which `Module` you want to instantiate within a
10 ///   fixed amount of resources, e.g. determining whether to create 5
11 ///   instances of module `X` or 10 instances of module `Y`.
12 pub struct ResourcesRequired {
13     /// The number of memories that are required.
14     pub num_memories: u32,
15     /// The maximum initial size required by any memory, in units of Wasm pages.
16     pub max_initial_memory_size: Option<u64>,
17     /// The number of tables that are required.
18     pub num_tables: u32,
19     /// The maximum initial size required by any table.
20     pub max_initial_table_size: Option<u64>,
21 }
22 
23 impl ResourcesRequired {
24     #[cfg(feature = "component-model")]
add(&mut self, other: &ResourcesRequired)25     pub(crate) fn add(&mut self, other: &ResourcesRequired) {
26         self.num_memories += other.num_memories;
27         self.max_initial_memory_size =
28             core::cmp::max(self.max_initial_memory_size, other.max_initial_memory_size);
29         self.num_tables += other.num_tables;
30         self.max_initial_table_size =
31             core::cmp::max(self.max_initial_table_size, other.max_initial_table_size);
32     }
33 }
34