use std::ffi::CString;
use tlua::AsLua as _;
use crate::error::{Error, TarantoolError};
use crate::ffi::lua as ffi_lua;
use crate::ffi::tarantool::luaT_call;
pub fn uid() -> Result<isize, Error> {
unsafe {
let lua = crate::lua_state();
let uid_state = lua.as_lua();
let name_box = CString::new("box").unwrap();
ffi_lua::lua_getglobal(uid_state, name_box.as_ptr());
let name_session = CString::new("session").unwrap();
ffi_lua::lua_getfield(uid_state, -1, name_session.as_ptr());
let name_uid = CString::new("uid").unwrap();
ffi_lua::lua_getfield(uid_state, -1, name_uid.as_ptr());
if luaT_call(uid_state, 0, 1) == 1 {
Err(TarantoolError::last().into())
} else {
Ok(ffi_lua::lua_tointeger(uid_state, -1))
}
}
}
pub fn euid() -> Result<isize, Error> {
unsafe {
let lua = crate::lua_state();
let euid_state = lua.as_lua();
let name = CString::new("box").unwrap();
ffi_lua::lua_getglobal(euid_state, name.as_ptr());
let name_session = CString::new("session").unwrap();
ffi_lua::lua_getfield(euid_state, -1, name_session.as_ptr());
let name_euid = CString::new("euid").unwrap();
ffi_lua::lua_getfield(euid_state, -1, name_euid.as_ptr());
if luaT_call(euid_state, 0, 1) == 1 {
Err(TarantoolError::last().into())
} else {
Ok(ffi_lua::lua_tointeger(euid_state, -1))
}
}
}