//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

// NS_OPTIONS
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct CKRecordZoneCapabilities(pub NSUInteger);
bitflags::bitflags! {
    impl CKRecordZoneCapabilities: NSUInteger {
        const CKRecordZoneCapabilityFetchChanges = 1<<0;
        const CKRecordZoneCapabilityAtomic = 1<<1;
        const CKRecordZoneCapabilitySharing = 1<<2;
        const CKRecordZoneCapabilityZoneWideSharing = 1<<3;
    }
}

unsafe impl Encode for CKRecordZoneCapabilities {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for CKRecordZoneCapabilities {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern "C" {
    pub static CKRecordZoneDefaultName: &'static NSString;
}

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct CKRecordZone;

    unsafe impl ClassType for CKRecordZone {
        type Super = NSObject;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSCoding for CKRecordZone {}

unsafe impl NSCopying for CKRecordZone {}

unsafe impl NSObjectProtocol for CKRecordZone {}

unsafe impl NSSecureCoding for CKRecordZone {}

extern_methods!(
    unsafe impl CKRecordZone {
        #[method_id(@__retain_semantics Other defaultRecordZone)]
        pub unsafe fn defaultRecordZone() -> Retained<CKRecordZone>;

        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;

        #[method_id(@__retain_semantics Init initWithZoneName:)]
        pub unsafe fn initWithZoneName(
            this: Allocated<Self>,
            zone_name: &NSString,
        ) -> Retained<Self>;

        #[cfg(feature = "CKRecordZoneID")]
        #[method_id(@__retain_semantics Init initWithZoneID:)]
        pub unsafe fn initWithZoneID(
            this: Allocated<Self>,
            zone_id: &CKRecordZoneID,
        ) -> Retained<Self>;

        #[cfg(feature = "CKRecordZoneID")]
        #[method_id(@__retain_semantics Other zoneID)]
        pub unsafe fn zoneID(&self) -> Retained<CKRecordZoneID>;

        #[method(capabilities)]
        pub unsafe fn capabilities(&self) -> CKRecordZoneCapabilities;

        #[cfg(feature = "CKReference")]
        #[method_id(@__retain_semantics Other share)]
        pub unsafe fn share(&self) -> Option<Retained<CKReference>>;
    }
);
