mirror of
https://github.com/lune-org/lune.git
synced 2024-12-13 13:30:38 +00:00
49 lines
1.2 KiB
Rust
49 lines
1.2 KiB
Rust
|
#![allow(clippy::missing_errors_doc)]
|
||
|
#![allow(clippy::missing_panics_doc)]
|
||
|
#![allow(clippy::cargo_common_metadata)]
|
||
|
|
||
|
use mlua::prelude::*;
|
||
|
use mlua_luau_scheduler::Scheduler;
|
||
|
|
||
|
use async_io::block_on;
|
||
|
|
||
|
const MAIN_SCRIPT: &str = include_str!("./lua/callbacks.luau");
|
||
|
|
||
|
pub fn main() -> LuaResult<()> {
|
||
|
tracing_subscriber::fmt()
|
||
|
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
|
||
|
.with_target(false)
|
||
|
.without_time()
|
||
|
.init();
|
||
|
|
||
|
// Set up persistent Lua environment
|
||
|
let lua = Lua::new();
|
||
|
|
||
|
// Create a new scheduler with custom callbacks
|
||
|
let sched = Scheduler::new(&lua);
|
||
|
sched.set_error_callback(|e| {
|
||
|
println!(
|
||
|
"Captured error from Lua!\n{}\n{e}\n{}",
|
||
|
"-".repeat(15),
|
||
|
"-".repeat(15)
|
||
|
);
|
||
|
});
|
||
|
|
||
|
// Load the main script into the scheduler, and keep track of the thread we spawn
|
||
|
let main = lua.load(MAIN_SCRIPT);
|
||
|
let id = sched.push_thread_front(main, ())?;
|
||
|
|
||
|
// Run until completion
|
||
|
block_on(sched.run());
|
||
|
|
||
|
// We should have gotten the error back from our script
|
||
|
assert!(sched.get_thread_result(id).unwrap().is_err());
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_callbacks() -> LuaResult<()> {
|
||
|
main()
|
||
|
}
|