mod journal;
mod parallel;
mod pmap;
mod single;
use crate::sdk::SdkContext;
use mlua::Lua;
pub(crate) fn register_agent_sdk(lua: &Lua, cx: &SdkContext) -> mlua::Result<()> {
single::register(lua, cx)?;
parallel::register(lua, cx)?;
pmap::register(lua, cx)?;
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use crate::sdk::test_support::make_sdk_context;
use mlua::Lua;
#[tokio::test]
async fn register_agent_sdk_registers_three_globals() {
let lua = Lua::new();
let cx = make_sdk_context();
register_agent_sdk(&lua, &cx).expect("register_agent_sdk should succeed");
let globals = lua.globals();
assert!(
globals.get::<mlua::Function>("agent").is_ok(),
"agent global must be registered as a function"
);
assert!(
globals.get::<mlua::Function>("parallel").is_ok(),
"parallel global must be registered as a function"
);
assert!(
globals.get::<mlua::Function>("pmap").is_ok(),
"pmap global must be registered as a function"
);
}
#[tokio::test]
async fn register_agent_sdk_overwrites_existing_globals_without_panic() {
let lua = Lua::new();
let globals = lua.globals();
globals
.set("agent", lua.create_function(|_, _: ()| Ok(())).unwrap())
.unwrap();
globals
.set("parallel", lua.create_function(|_, _: ()| Ok(())).unwrap())
.unwrap();
let cx = make_sdk_context();
register_agent_sdk(&lua, &cx).unwrap();
let _: mlua::Function = globals.get("agent").unwrap();
let _: mlua::Function = globals.get("parallel").unwrap();
let _: mlua::Function = globals.get("pmap").unwrap();
}
#[tokio::test]
async fn registered_agent_global_is_callable_from_lua() {
let lua = Lua::new();
let cx = make_sdk_context();
register_agent_sdk(&lua, &cx).unwrap();
let script = r#"local _ = agent"#;
lua.load(script)
.exec()
.expect("agent must be a callable global");
}
#[tokio::test]
async fn registered_parallel_and_pmap_globals_are_callable_from_lua() {
let lua = Lua::new();
let cx = make_sdk_context();
register_agent_sdk(&lua, &cx).unwrap();
let script = r#"local _ = parallel; local __ = pmap"#;
lua.load(script)
.exec()
.expect("parallel and pmap must be callable globals");
}
}