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

use crate::*;

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/cloudkit/ckdiscoveruseridentitiesoperation?language=objc)
    #[unsafe(super(CKOperation, NSOperation, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(feature = "CKOperation")]
    #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
    pub struct CKDiscoverUserIdentitiesOperation;
);

#[cfg(feature = "CKOperation")]
extern_conformance!(
    unsafe impl NSObjectProtocol for CKDiscoverUserIdentitiesOperation {}
);

#[cfg(feature = "CKOperation")]
impl CKDiscoverUserIdentitiesOperation {
    extern_methods!(
        #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[cfg(feature = "CKUserIdentityLookupInfo")]
        #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
        #[unsafe(method(initWithUserIdentityLookupInfos:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithUserIdentityLookupInfos(
            this: Allocated<Self>,
            user_identity_lookup_infos: &NSArray<CKUserIdentityLookupInfo>,
        ) -> Retained<Self>;

        #[cfg(feature = "CKUserIdentityLookupInfo")]
        /// This property is not atomic.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
        #[unsafe(method(userIdentityLookupInfos))]
        #[unsafe(method_family = none)]
        pub unsafe fn userIdentityLookupInfos(&self)
            -> Retained<NSArray<CKUserIdentityLookupInfo>>;

        #[cfg(feature = "CKUserIdentityLookupInfo")]
        /// Setter for [`userIdentityLookupInfos`][Self::userIdentityLookupInfos].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
        #[unsafe(method(setUserIdentityLookupInfos:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setUserIdentityLookupInfos(
            &self,
            user_identity_lookup_infos: &NSArray<CKUserIdentityLookupInfo>,
        );

        #[cfg(all(
            feature = "CKUserIdentity",
            feature = "CKUserIdentityLookupInfo",
            feature = "block2"
        ))]
        /// Called once for each user identity lookup info that was successfully discovered on the server
        ///
        ///
        /// Each
        /// `CKOperation`instance has a private serial queue. This queue is used for all callback block invocations.
        /// This block may share mutable state with other blocks assigned to this operation, but any such mutable state
        /// should not be concurrently used outside of blocks assigned to this operation.
        ///
        /// This property is not atomic.
        ///
        /// # Safety
        ///
        /// - The returned block's argument 1 must be a valid pointer.
        /// - The returned block's argument 2 must be a valid pointer.
        /// - This might not be thread-safe.
        #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
        #[unsafe(method(userIdentityDiscoveredBlock))]
        #[unsafe(method_family = none)]
        pub unsafe fn userIdentityDiscoveredBlock(
            &self,
        ) -> *mut block2::DynBlock<dyn Fn(NonNull<CKUserIdentity>, NonNull<CKUserIdentityLookupInfo>)>;

        #[cfg(all(
            feature = "CKUserIdentity",
            feature = "CKUserIdentityLookupInfo",
            feature = "block2"
        ))]
        /// Setter for [`userIdentityDiscoveredBlock`][Self::userIdentityDiscoveredBlock].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
        #[unsafe(method(setUserIdentityDiscoveredBlock:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setUserIdentityDiscoveredBlock(
            &self,
            user_identity_discovered_block: Option<
                &block2::DynBlock<
                    dyn Fn(NonNull<CKUserIdentity>, NonNull<CKUserIdentityLookupInfo>),
                >,
            >,
        );

        #[cfg(feature = "block2")]
        /// This block is called when the operation completes.
        ///
        ///
        /// The
        ///
        /// ```text
        ///  -[NSOperation completionBlock]
        /// ```
        ///
        /// will also be called if both are set.
        /// Each
        /// `CKOperation`instance has a private serial queue. This queue is used for all callback block invocations.
        /// This block may share mutable state with other blocks assigned to this operation, but any such mutable state
        /// should not be concurrently used outside of blocks assigned to this operation.
        ///
        /// This property is not atomic.
        ///
        /// # Safety
        ///
        /// - The returned block's argument must be a valid pointer or null.
        /// - This might not be thread-safe.
        #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
        #[unsafe(method(discoverUserIdentitiesCompletionBlock))]
        #[unsafe(method_family = none)]
        pub unsafe fn discoverUserIdentitiesCompletionBlock(
            &self,
        ) -> *mut block2::DynBlock<dyn Fn(*mut NSError)>;

        #[cfg(feature = "block2")]
        /// Setter for [`discoverUserIdentitiesCompletionBlock`][Self::discoverUserIdentitiesCompletionBlock].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[deprecated = "No longer supported. Please see Sharing CloudKit Data with Other iCloud Users."]
        #[unsafe(method(setDiscoverUserIdentitiesCompletionBlock:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setDiscoverUserIdentitiesCompletionBlock(
            &self,
            discover_user_identities_completion_block: Option<
                &block2::DynBlock<dyn Fn(*mut NSError)>,
            >,
        );
    );
}

/// Methods declared on superclass `NSObject`.
#[cfg(feature = "CKOperation")]
impl CKDiscoverUserIdentitiesOperation {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}
