#[derive(Debug, Clone)]
pub struct LuaOptions {
pub timeout_millis: i64,
pub lua_memory_limit_bytes: i64,
pub allow_local_reads: bool,
pub log_mode: LuaLoggingMode,
pub memory_mode: LuaMemoryManagementMode,
pub allowed_functions: Vec<String>,
}
impl Default for LuaOptions {
fn default() -> Self {
Self {
timeout_millis: 0,
lua_memory_limit_bytes: 0,
allow_local_reads: true,
log_mode: LuaLoggingMode::Silent,
memory_mode: LuaMemoryManagementMode::Native,
allowed_functions: Vec::new(),
}
}
}
impl LuaOptions {
pub fn get_memory_limit_bytes(&self) -> Option<usize> {
if self.lua_memory_limit_bytes > 0 {
Some(self.lua_memory_limit_bytes as usize)
} else {
None
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum LuaMemoryManagementMode {
Native = 0,
Tracked = 1,
Managed = 2,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[repr(u8)]
pub enum LuaLoggingMode {
#[default]
Enable = 0,
Silent = 1,
Disable = 2,
}
#[cfg(test)]
mod tests {
use super::{LuaLoggingMode, LuaMemoryManagementMode, LuaOptions};
#[test]
fn memory_limit_semantics() {
let default = LuaOptions::default();
assert_eq!(default.get_memory_limit_bytes(), None);
assert_eq!(default.log_mode, LuaLoggingMode::Silent);
assert_eq!(default.memory_mode, LuaMemoryManagementMode::Native);
let limited = LuaOptions {
lua_memory_limit_bytes: 1024 * 1024,
..LuaOptions::default()
};
assert_eq!(limited.get_memory_limit_bytes(), Some(1024 * 1024));
}
}