az-script-engine
自动收集自
crates/runtime/az-script-engine/README.md。
可嵌入脚本引擎的通用契约。
此 crate 定义了请求、响应、语言枚举以及具体引擎实现的 trait。
提供内容
ScriptLangScriptInputScriptOutputScriptEngineScriptEngineFactoryInMemoryScriptEngineRegistry
示例
use std::collections::BTreeMap;
use az_sandbox::sandbox::SandboxPolicy;
use az_script_engine::script::{ScriptInput, ScriptLang};
let input = ScriptInput {
source: "40 + 2".to_string(),
lang: ScriptLang::Rhai,
vars: BTreeMap::new(),
policy: SandboxPolicy::permissive(),
timeout_secs: 5,
};
assert_eq!(input.timeout_secs, 5);
插件化接入
具体引擎实现 crate 可以实现 ScriptEngineFactory,宿主再用 registry 统一装配:
use az_script_engine::script::{
InMemoryScriptEngineRegistry, ScriptEngineFactory,
};
fn registry_from_plugins(factories: &[&dyn ScriptEngineFactory]) -> InMemoryScriptEngineRegistry {
InMemoryScriptEngineRegistry::with_factories(factories)
}
单个插件也可以显式注册,registry 会按 ScriptLang 替换同语言旧实现:
use az_script_engine::script::{InMemoryScriptEngineRegistry, ScriptEngineFactory};
fn add_plugin(registry: &mut InMemoryScriptEngineRegistry, factory: &dyn ScriptEngineFactory) {
registry.register_from_factory(factory);
}
面向 trait object registry 时可直接复用同一层契约检查:
use az_script_engine::script::{
ScriptEngineFactory, ScriptEngineRegistry, register_engine_factory,
};
fn add_plugin(registry: &mut dyn ScriptEngineRegistry, factory: &dyn ScriptEngineFactory) {
register_engine_factory(registry, factory);
}
适用范围
此 crate 仅包含契约定义,不附带具体引擎实现。