1 use arbitrary::Arbitrary;
2 
3 use super::InstanceLimits;
4 
5 /// Configuration for `wasmtime::InstanceAllocationStrategy`.
6 #[derive(Arbitrary, Clone, Debug, Eq, PartialEq, Hash)]
7 pub enum InstanceAllocationStrategy {
8     /// Use the on-demand instance allocation strategy.
9     OnDemand,
10     /// Use the pooling instance allocation strategy.
11     Pooling {
12         /// The pooling strategy to use.
13         strategy: PoolingAllocationStrategy,
14         /// The instance limits.
15         instance_limits: InstanceLimits,
16     },
17 }
18 
19 impl InstanceAllocationStrategy {
20     /// Convert this generated strategy a Wasmtime strategy.
21     pub fn to_wasmtime(&self) -> wasmtime::InstanceAllocationStrategy {
22         match self {
23             InstanceAllocationStrategy::OnDemand => wasmtime::InstanceAllocationStrategy::OnDemand,
24             InstanceAllocationStrategy::Pooling {
25                 strategy,
26                 instance_limits,
27             } => wasmtime::InstanceAllocationStrategy::Pooling {
28                 strategy: strategy.to_wasmtime(),
29                 instance_limits: instance_limits.to_wasmtime(),
30             },
31         }
32     }
33 }
34 
35 /// Configuration for `wasmtime::PoolingAllocationStrategy`.
36 #[derive(Arbitrary, Clone, Debug, PartialEq, Eq, Hash)]
37 pub enum PoolingAllocationStrategy {
38     /// Use next available instance slot.
39     NextAvailable,
40     /// Use random instance slot.
41     Random,
42     /// Use an affinity-based strategy.
43     ReuseAffinity,
44 }
45 
46 impl PoolingAllocationStrategy {
47     fn to_wasmtime(&self) -> wasmtime::PoolingAllocationStrategy {
48         match self {
49             PoolingAllocationStrategy::NextAvailable => {
50                 wasmtime::PoolingAllocationStrategy::NextAvailable
51             }
52             PoolingAllocationStrategy::Random => wasmtime::PoolingAllocationStrategy::Random,
53             PoolingAllocationStrategy::ReuseAffinity => {
54                 wasmtime::PoolingAllocationStrategy::ReuseAffinity
55             }
56         }
57     }
58 }
59