lv_std/unsafe_std/c/
handle_buffer.rs

1use 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}