1use std::ffi::c_void;
2
3use crate::ffi;
4
5#[derive(Debug)]
7pub struct Buffer<'a> {
8 pub raw: &'a mut ffi::vsb,
10}
11
12impl Buffer<'_> {
13 #[expect(clippy::not_unsafe_ptr_arg_deref)]
15 pub fn from_ptr(raw: *mut ffi::vsb) -> Self {
16 let raw = unsafe { raw.as_mut().unwrap() };
17 assert_eq!(raw.magic, ffi::VSB_MAGIC);
18 Self { raw }
19 }
20
21 #[expect(clippy::result_unit_err)] pub fn write<T: AsRef<[u8]>>(&mut self, src: &T) -> Result<(), ()> {
24 let buf = src.as_ref().as_ptr().cast::<c_void>();
25 let l = src.as_ref().len();
26
27 match unsafe { ffi::VSB_bcat(self.raw, buf, l as isize) } {
28 0 => Ok(()),
29 _ => Err(()),
30 }
31 }
32}