lv_std/unsafe_std/c/
handle_buffer.rs1use std::marker::PhantomData;
2use generic_array::{ArrayLength, GenericArray};
3use crate::unsafe_std::c::opaque_handle::OpaqueHandle;
4use crate::unsafe_std::ptrs::into_raw_ptr::IntoRawPtr;
5use crate::unsafe_std::ptrs::raw_ptr::RawPtr;
6use crate::unsafe_std::ptrs::void::void;
7
8#[repr(transparent)]
9pub struct HandleBuffer<T>
10where
11 T: OpaqueHandle,
12 T::Size: ArrayLength,
13{
14 buffer: GenericArray<u8, T::Size>,
15 _marker: PhantomData<T>,
16}
17
18impl<T> HandleBuffer<T>
19where
20 T: OpaqueHandle,
21 T::Size: ArrayLength,
22{
23 pub fn new() -> Self {
24 Self {
25 buffer: GenericArray::default(),
26 _marker: PhantomData,
27 }
28 }
29}
30
31unsafe impl<T: OpaqueHandle> IntoRawPtr for HandleBuffer<T> {
32
33 type Pointee = void;
34
35 unsafe fn to_ptr(&self) -> RawPtr<Self::Pointee> {
36 RawPtr::<u8>::from(self.buffer.as_ptr()).cast()
37 }
38}