use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;
use crate::*;
extern_protocol!(
pub unsafe trait MTLFunctionHandle: NSObjectProtocol + Send + Sync {
#[cfg(feature = "MTLLibrary")]
#[unsafe(method(functionType))]
#[unsafe(method_family = none)]
fn functionType(&self) -> MTLFunctionType;
#[unsafe(method(name))]
#[unsafe(method_family = none)]
fn name(&self) -> Retained<NSString>;
#[cfg(feature = "MTLDevice")]
#[unsafe(method(device))]
#[unsafe(method_family = none)]
fn device(&self) -> Retained<ProtocolObject<dyn MTLDevice>>;
#[cfg(feature = "MTLTypes")]
#[unsafe(method(gpuResourceID))]
#[unsafe(method_family = none)]
fn gpuResourceID(&self) -> MTLResourceID;
}
);