use core::ptr::NonNull;
use block2::{Block, RcBlock};
use objc2::runtime::ProtocolObject;
use super::MTLIOCommandBuffer;
pub struct MTLIOCommandBufferHandler(RcBlock<dyn Fn(NonNull<ProtocolObject<dyn MTLIOCommandBuffer>>)>);
impl MTLIOCommandBufferHandler {
pub fn new<F>(handler: F) -> Self
where
F: Fn(&ProtocolObject<dyn MTLIOCommandBuffer>) + Send + Sync + 'static,
{
Self(RcBlock::new(move |ptr: NonNull<ProtocolObject<dyn MTLIOCommandBuffer>>| {
let cb = unsafe { ptr.as_ref() };
handler(cb);
}))
}
pub(super) fn as_block(&self) -> &Block<dyn Fn(NonNull<ProtocolObject<dyn MTLIOCommandBuffer>>)> {
&self.0
}
}
pub type MTLIOCommandBufferCompletedHandler = MTLIOCommandBufferHandler;