use mlua::{Error, ErrorContext, Lua, Result}; #[test] fn test_error_context() -> Result<()> { let lua = Lua::new(); let func = lua.create_function(|_, ()| { Err::<(), _>(Error::RuntimeError("runtime error".into())).context("some context") })?; lua.globals().set("func", func)?; let msg = lua .load("local _, err = pcall(func); return tostring(err)") .eval::()?; assert!(msg.contains("some context")); assert!(msg.contains("runtime error")); let func2 = lua.create_function(|lua, ()| { lua.globals() .get::<_, String>("nonextant") .with_context(|_| "failed to find global") })?; lua.globals().set("func2", func2)?; let msg2 = lua .load("local _, err = pcall(func2); return tostring(err)") .eval::()?; assert!(msg2.contains("failed to find global")); println!("{msg2}"); assert!(msg2.contains("error converting Lua nil to String")); Ok(()) }