#[cfg(feature = "interpreters-rhai")]
pub mod rhai;
#[cfg(feature = "interpreters-lua")]
pub mod lua;
#[cfg(feature = "interpreters-js")]
pub mod javascript;
#[cfg(feature = "interpreters-python")]
pub mod python;
use super::types::{ExecutionLimits, ExecutionRequest, ExecutionResult};
#[allow(dead_code)]
pub trait LanguageExecutor {
fn execute(&self, request: &ExecutionRequest) -> ExecutionResult;
fn language_name(&self) -> &'static str;
fn language_version(&self) -> String;
}
pub(crate) fn get_limits(request: &ExecutionRequest) -> ExecutionLimits {
request.limits.clone().unwrap_or_else(|| ExecutionLimits {
max_timeout_ms: request.timeout_ms,
max_memory_mb: request.memory_limit_mb,
..ExecutionLimits::default()
})
}
pub(crate) fn truncate_output(output: &str, max_bytes: usize) -> String {
if output.len() <= max_bytes {
output.to_string()
} else {
let truncated = &output[..max_bytes];
format!(
"{}...\n[Output truncated at {} bytes]",
truncated, max_bytes
)
}
}