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