27 lines
734 B
Rust
Executable File
27 lines
734 B
Rust
Executable File
use std::ffi::CStr;
|
|
|
|
use crate::State;
|
|
|
|
use mlua_sys as lua;
|
|
|
|
pub unsafe fn ensure_type(state: &State, typ: i32, idx: i32) -> crate::Result<()> {
|
|
let s = state.state_ptr();
|
|
|
|
let lua_type = lua::lua_type(s, idx);
|
|
|
|
if lua_type == typ {
|
|
Ok(())
|
|
} else {
|
|
let exp_tyname = lua::lua_typename(s, typ);
|
|
let exp_cstr = CStr::from_ptr(exp_tyname);
|
|
let exp_s = exp_cstr.to_str()
|
|
.expect("Lua type has invalid bytes!");
|
|
|
|
let tyname = lua::lua_typename(s, lua_type);
|
|
let cstr = CStr::from_ptr(tyname);
|
|
let s = cstr.to_str()
|
|
.expect("Lua type has invalid bytes!");
|
|
|
|
Err(crate::Error::UnexpectedType(exp_s.to_string(), s.to_string()))
|
|
}
|
|
} |