Skip to main content

sim_lib_plugin_wasm/
limits.rs

1//! Resource-limit policy for WebAssembly audio plugins.
2
3/// Resource limits applied to every WebAssembly plugin instance.
4#[derive(Clone, Copy, Debug, PartialEq, Eq)]
5pub struct WasmResourceLimits {
6    /// Wasmtime fuel units available for each audio process call.
7    pub fuel_per_process: u64,
8    /// Maximum number of 64 KiB linear-memory pages per instance.
9    pub max_memory_pages: u32,
10}
11
12impl Default for WasmResourceLimits {
13    fn default() -> Self {
14        Self {
15            fuel_per_process: 10_000_000,
16            max_memory_pages: 64,
17        }
18    }
19}
20
21impl WasmResourceLimits {
22    /// Returns a tighter profile for tests and low-trust plugin loads.
23    pub fn strict() -> Self {
24        Self {
25            fuel_per_process: 1_000_000,
26            max_memory_pages: 16,
27        }
28    }
29
30    /// Returns a roomier profile for trusted local plugin development.
31    pub fn permissive() -> Self {
32        Self {
33            fuel_per_process: 100_000_000,
34            max_memory_pages: 256,
35        }
36    }
37
38    /// Returns the maximum memory size in bytes.
39    pub fn max_memory_bytes(self) -> usize {
40        self.max_memory_pages as usize * 64 * 1024
41    }
42}