use anyhow::Result;
pub struct PluginSandbox {
enabled: bool,
permissions: Vec<String>,
}
impl PluginSandbox {
pub fn new(enabled: bool) -> Self {
Self {
enabled,
permissions: Vec::new(),
}
}
pub fn enable(&mut self) {
self.enabled = true;
println!("Plugin sandbox enabled");
}
pub fn disable(&mut self) {
self.enabled = false;
println!("Plugin sandbox disabled");
}
pub fn add_permission(&mut self, permission: String) {
if !self.permissions.contains(&permission) {
self.permissions.push(permission);
}
}
pub fn has_permission(&self, permission: &str) -> bool {
self.permissions.contains(&permission.to_string())
}
pub fn execute_in_sandbox(&self, code: &str) -> Result<String> {
if self.enabled {
println!("Executing in sandbox: {} bytes", code.len());
Ok("Executed in sandbox".to_string())
} else {
println!("Sandbox disabled, executing directly");
Ok("Executed directly".to_string())
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::collections::{HashMap, BTreeMap};
#[test]
fn test_sandbox_creation() {
let sandbox: _ = PluginSandbox::new(true);
assert!(sandbox.enabled);
}
#[test]
fn test_permission_management() {
let mut sandbox = PluginSandbox::new(true);
sandbox.add_permission("read".to_string());
assert!(sandbox.has_permission("read"));
}
#[test]
fn test_execute_in_sandbox() {
let sandbox: _ = PluginSandbox::new(true);
let result: _ = sandbox.execute_in_sandbox("test code").unwrap();
assert_eq!(result, "Executed in sandbox");
}
}