use objc2::{extern_class, extern_methods, rc::Retained, runtime::NSObject};
use crate::MTLDataType;
extern_class!(
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct MTLArrayType;
);
impl MTLArrayType {
extern_methods!(
#[unsafe(method(elementType))]
#[unsafe(method_family = none)]
pub fn element_type(&self) -> MTLDataType;
#[unsafe(method(arrayLength))]
#[unsafe(method_family = none)]
pub fn array_length(&self) -> usize;
#[unsafe(method(stride))]
#[unsafe(method_family = none)]
pub fn stride(&self) -> usize;
#[unsafe(method(argumentIndexStride))]
#[unsafe(method_family = none)]
pub fn argument_index_stride(&self) -> usize;
#[unsafe(method(elementStructType))]
#[unsafe(method_family = none)]
pub fn element_struct_type(&self) -> Option<Retained<crate::argument::MTLStructType>>;
#[unsafe(method(elementArrayType))]
#[unsafe(method_family = none)]
pub fn element_array_type(&self) -> Option<Retained<MTLArrayType>>;
#[unsafe(method(elementTextureReferenceType))]
#[unsafe(method_family = none)]
pub fn element_texture_reference_type(&self) -> Option<Retained<crate::argument::MTLTextureReferenceType>>;
#[unsafe(method(elementPointerType))]
#[unsafe(method_family = none)]
pub fn element_pointer_type(&self) -> Option<Retained<crate::argument::MTLPointerType>>;
#[unsafe(method(elementTensorReferenceType))]
#[unsafe(method_family = none)]
pub fn element_tensor_reference_type(&self) -> Option<Retained<crate::MTLTensorReferenceType>>;
);
}