use std::marker::PhantomData;
use generic_array::{ArrayLength, GenericArray};
use crate::unsafe_std::c::opaque_handle::OpaqueHandle;
use crate::unsafe_std::ptrs::into_raw_ptr::IntoRawPtr;
use crate::unsafe_std::ptrs::raw_ptr::RawPtr;
use crate::unsafe_std::ptrs::void::void;
#[repr(transparent)]
pub struct HandleBuffer<T>
where
T: OpaqueHandle,
T::Size: ArrayLength,
{
buffer: GenericArray<u8, T::Size>,
_marker: PhantomData<T>,
}
impl<T> HandleBuffer<T>
where
T: OpaqueHandle,
T::Size: ArrayLength,
{
pub fn new() -> Self {
Self {
buffer: GenericArray::default(),
_marker: PhantomData,
}
}
}
unsafe impl<T: OpaqueHandle> IntoRawPtr for HandleBuffer<T> {
type Pointee = void;
unsafe fn to_ptr(&self) -> RawPtr<Self::Pointee> {
RawPtr::<u8>::from(self.buffer.as_ptr()).cast()
}
}