use objc2::{Message, extern_protocol, msg_send, rc::Retained};
use objc2_foundation::{NSArray, NSObjectProtocol, NSString};
use super::MTLCommandEncoderErrorState;
extern_protocol!(
#[expect(
clippy::missing_safety_doc,
reason = "extern_protocol does not attach this safety section to its generated unsafe trait"
)]
pub unsafe trait MTLCommandBufferEncoderInfo: NSObjectProtocol {
#[unsafe(method(errorState))]
#[unsafe(method_family = none)]
fn error_state(&self) -> MTLCommandEncoderErrorState;
}
);
pub trait MTLCommandBufferEncoderInfoExt: MTLCommandBufferEncoderInfo + Message {
fn label(&self) -> String
where
Self: Sized,
{
let label: Retained<NSString> = unsafe { msg_send![self, label] };
label.to_string()
}
fn debug_signposts(&self) -> Box<[String]>
where
Self: Sized,
{
let signposts: Retained<NSArray<NSString>> = unsafe { msg_send![self, debugSignposts] };
signposts.iter().map(|signpost| signpost.to_string()).collect::<Vec<_>>().into_boxed_slice()
}
}
impl<T: MTLCommandBufferEncoderInfo + Message> MTLCommandBufferEncoderInfoExt for T {}