use core::{ffi::CStr, marker::PhantomData, mem::MaybeUninit};
use crate::{LuaState, ffi};
#[repr(transparent)]
#[derive(Debug)]
pub struct StringBuffer<'a>(*mut ffi::luaL_Buffer, PhantomData<&'a mut LuaState>);
impl LuaState {
pub fn init_buffer(&mut self) -> StringBuffer<'_> {
if ffi::LUAL_BUFFERSIZE == 1 {
panic!("Your target does not currently support `StringBuffer`!\nIf your target is officially supported by LuaJIT, contact me!");
}
unsafe {
let mut buffer = MaybeUninit::<StringBuffer>::uninit();
ffi::luaL_buffinit(self.0, buffer.as_mut_ptr().cast());
buffer.assume_init()
}
}
}
impl StringBuffer<'_> {
pub fn add_cstring(&mut self, cstring: &CStr) {
unsafe { ffi::luaL_addstring(self.0, cstring.as_ptr()); }
}
pub fn push_result(self) {
unsafe { ffi::luaL_pushresult(self.0); }
}
}