use crate::diplomat_buffer_write_create;
use crate::diplomat_buffer_write_destroy;
use crate::DiplomatWrite;
use core::borrow::Borrow;
pub struct RustWriteVec {
ptr: *mut DiplomatWrite,
}
impl RustWriteVec {
pub fn with_capacity(cap: usize) -> Self {
Self {
ptr: diplomat_buffer_write_create(cap),
}
}
#[allow(clippy::should_implement_trait)] pub fn borrow(&self) -> &DiplomatWrite {
unsafe { &*self.ptr }
}
pub unsafe fn borrow_mut(&mut self) -> &mut DiplomatWrite {
unsafe { &mut *self.ptr }
}
}
impl Borrow<DiplomatWrite> for RustWriteVec {
fn borrow(&self) -> &DiplomatWrite {
self.borrow()
}
}
impl Drop for RustWriteVec {
fn drop(&mut self) {
unsafe { diplomat_buffer_write_destroy(self.ptr) }
}
}
#[cfg(test)]
mod tests {
use super::*;
use core::fmt::Write;
#[test]
fn test_rust_write() {
let mut buffer = RustWriteVec::with_capacity(5);
unsafe { buffer.borrow_mut() }
.write_str("Hello World")
.unwrap();
assert_eq!(buffer.borrow().as_bytes(), b"Hello World");
}
}