1use std::ffi::c_void;
2
3use crate::{lua_State, lua_dump, LError};
4
5pub unsafe fn dump<WRITER>(
7 state: lua_State,
8 buffer_writer: &mut WRITER,
9) -> std::result::Result<(), LError>
10where
11 WRITER: std::io::Write,
12{
13 unsafe extern "C" fn writer_callback<WRITER>(
14 _: lua_State,
15 data: *const u8,
16 size: usize,
17 userdata: *mut c_void,
18 ) -> i32
19 where
20 WRITER: std::io::Write,
21 {
22 let writer = &mut *userdata.cast::<WRITER>();
23 match writer.write_all(std::slice::from_raw_parts(data, size)) {
24 Ok(_) => 0,
25 Err(_) => 1,
26 }
27 }
28 match lua_dump(
29 state,
30 writer_callback::<WRITER>,
31 buffer_writer as *mut WRITER as _,
32 ) {
33 0 => Ok(()),
34 any @ _ => Err(LError::DumpError(any)),
35 }
36}