use std::ffi::CString;
use crate::error::{Error, TarantoolError};
use crate::ffi::lua as ffi_lua;
use crate::ffi::tarantool::{luaT_call, luaT_state};
pub fn uid() -> Result<isize, Error> {
unsafe {
let state = luaT_state();
let uid_state = ffi_lua::lua_newthread(state);
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 state = luaT_state();
let euid_state = ffi_lua::lua_newthread(state);
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))
}
}
}