objc2-external-accessory 0.3.2

Bindings to the ExternalAccessory framework
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
#[cfg(feature = "dispatch2")]
use dispatch2::*;
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

/// Represents the current state of a EAWiFiUnconfiguredAccessoryBrowser.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/externalaccessory/eawifiunconfiguredaccessorybrowserstate?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct EAWiFiUnconfiguredAccessoryBrowserState(pub NSInteger);
impl EAWiFiUnconfiguredAccessoryBrowserState {
    #[doc(alias = "EAWiFiUnconfiguredAccessoryBrowserStateWiFiUnavailable")]
    pub const WiFiUnavailable: Self = Self(0);
    #[doc(alias = "EAWiFiUnconfiguredAccessoryBrowserStateStopped")]
    pub const Stopped: Self = Self(1);
    #[doc(alias = "EAWiFiUnconfiguredAccessoryBrowserStateSearching")]
    pub const Searching: Self = Self(2);
    #[doc(alias = "EAWiFiUnconfiguredAccessoryBrowserStateConfiguring")]
    pub const Configuring: Self = Self(3);
}

unsafe impl Encode for EAWiFiUnconfiguredAccessoryBrowserState {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

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

/// Represents the state of an EAWiFiUnconfiguredAccessory configuration process.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/externalaccessory/eawifiunconfiguredaccessoryconfigurationstatus?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct EAWiFiUnconfiguredAccessoryConfigurationStatus(pub NSInteger);
impl EAWiFiUnconfiguredAccessoryConfigurationStatus {
    #[doc(alias = "EAWiFiUnconfiguredAccessoryConfigurationStatusSuccess")]
    pub const Success: Self = Self(0);
    #[doc(alias = "EAWiFiUnconfiguredAccessoryConfigurationStatusUserCancelledConfiguration")]
    pub const UserCancelledConfiguration: Self = Self(1);
    #[doc(alias = "EAWiFiUnconfiguredAccessoryConfigurationStatusFailed")]
    pub const Failed: Self = Self(2);
}

unsafe impl Encode for EAWiFiUnconfiguredAccessoryConfigurationStatus {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

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

extern_class!(
    /// Interface for browsing unconfigured accessories
    ///
    ///
    /// This class brokers access to the MFi Wireless Accessory Configuration (WAC) process.
    /// This browser enables the application to scan for unconfigured accessories,
    /// connect them to the user's Wi-Fi infrastructure and configure attributes of
    /// the accessory.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/externalaccessory/eawifiunconfiguredaccessorybrowser?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct EAWiFiUnconfiguredAccessoryBrowser;
);

extern_conformance!(
    unsafe impl NSObjectProtocol for EAWiFiUnconfiguredAccessoryBrowser {}
);

impl EAWiFiUnconfiguredAccessoryBrowser {
    extern_methods!(
        /// The delegate object that will receive the browser events.
        #[unsafe(method(delegate))]
        #[unsafe(method_family = none)]
        pub unsafe fn delegate(
            &self,
        ) -> Option<Retained<ProtocolObject<dyn EAWiFiUnconfiguredAccessoryBrowserDelegate>>>;

        /// Setter for [`delegate`][Self::delegate].
        ///
        /// This is a [weak property][objc2::topics::weak_property].
        #[unsafe(method(setDelegate:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setDelegate(
            &self,
            delegate: Option<&ProtocolObject<dyn EAWiFiUnconfiguredAccessoryBrowserDelegate>>,
        );

        #[cfg(feature = "EAWiFiUnconfiguredAccessory")]
        /// The set of discovered unconfigured accessories described by EAWiFiUnconfiguredAccessory objects.
        /// This snapshot will only include objects matching the filter predicate defined when starting the search.
        #[unsafe(method(unconfiguredAccessories))]
        #[unsafe(method_family = none)]
        pub unsafe fn unconfiguredAccessories(
            &self,
        ) -> Retained<NSSet<EAWiFiUnconfiguredAccessory>>;

        #[cfg(feature = "dispatch2")]
        /// Designated initializer.
        ///
        ///
        /// Initializes an instance of the EAWiFiUnconfiguredAccessoryBrowser class
        /// which can be further configured based on the application's interests.
        ///
        ///
        /// Parameter `delegate`: The delegate that will receive the EAWiFiUnconfiguredAccessoryBrowserDelegate events.
        ///
        /// Parameter `queue`: The dispatch queue the delegate would like to receive events on. If nil the events will be on the main queue.
        ///
        ///
        /// Returns: Instance object
        ///
        /// # Safety
        ///
        /// `queue` possibly has additional threading requirements.
        #[unsafe(method(initWithDelegate:queue:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDelegate_queue(
            this: Allocated<Self>,
            delegate: Option<&ProtocolObject<dyn EAWiFiUnconfiguredAccessoryBrowserDelegate>>,
            queue: Option<&DispatchQueue>,
        ) -> Retained<Self>;

        /// Start the search for unconfigured accessories
        ///
        ///
        /// Starts a Wi-Fi scan for unconfigured accessories. This power and resource intensive process and must
        /// only be used when actively searching for accessories. Scans should be stopped immediately when the
        /// desired accessories have been located.
        ///
        ///
        /// Parameter `predicate`: The desired filter for unconfigured accessory results conforming to the EAWiFiUnconfiguredAccessory protocol.
        #[unsafe(method(startSearchingForUnconfiguredAccessoriesMatchingPredicate:))]
        #[unsafe(method_family = none)]
        pub unsafe fn startSearchingForUnconfiguredAccessoriesMatchingPredicate(
            &self,
            predicate: Option<&NSPredicate>,
        );

        /// Stop the search for unconfigured MFi Wireless Accessory Configuration accessories
        #[unsafe(method(stopSearchingForUnconfiguredAccessories))]
        #[unsafe(method_family = none)]
        pub unsafe fn stopSearchingForUnconfiguredAccessories(&self);
    );
}

/// Methods declared on superclass `NSObject`.
impl EAWiFiUnconfiguredAccessoryBrowser {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}

extern_protocol!(
    /// The delegate of a EAWiFiUnconfiguredAccessoryBrowser object must adopt the
    /// EAWiFiUnconfiguredAccessoryBrowserDelegate protocol. The required
    /// callbacks keep the delegate informed of the state of the search and configuration processes.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/externalaccessory/eawifiunconfiguredaccessorybrowserdelegate?language=objc)
    pub unsafe trait EAWiFiUnconfiguredAccessoryBrowserDelegate: NSObjectProtocol {
        /// Invoked whenever the EAWiFiUnconfiguredAccessoryBrowser's state has changed.
        ///
        ///
        /// Parameter `browser`: The EAWiFiUnconfiguredAccessoryBrowser instance generating the event.
        ///
        /// Parameter `state`: The current state of the EAWiFiUnconfiguredAccessoryBrowser.
        #[unsafe(method(accessoryBrowser:didUpdateState:))]
        #[unsafe(method_family = none)]
        unsafe fn accessoryBrowser_didUpdateState(
            &self,
            browser: &EAWiFiUnconfiguredAccessoryBrowser,
            state: EAWiFiUnconfiguredAccessoryBrowserState,
        );

        #[cfg(feature = "EAWiFiUnconfiguredAccessory")]
        /// Invoked whenever the EAWiFiUnconfiguredAccessoryBrowser has found new unconfigured accessories that match
        /// the filter predicate defined when starting the search.
        ///
        ///
        /// Parameter `browser`: The EAWiFiUnconfiguredAccessoryBrowser instance generating the event.
        ///
        /// Parameter `accessories`: The set of EAWiFiUnconfiguredAccessory objects that have been found since the last update.
        #[unsafe(method(accessoryBrowser:didFindUnconfiguredAccessories:))]
        #[unsafe(method_family = none)]
        unsafe fn accessoryBrowser_didFindUnconfiguredAccessories(
            &self,
            browser: &EAWiFiUnconfiguredAccessoryBrowser,
            accessories: &NSSet<EAWiFiUnconfiguredAccessory>,
        );

        #[cfg(feature = "EAWiFiUnconfiguredAccessory")]
        /// Invoked whenever the EAWiFiUnconfiguredAccessoryBrowser has removed unconfigured accessories from the scan results
        /// that match the filter predicate defined when starting the search.
        ///
        ///
        /// Parameter `browser`: The EAWiFiUnconfiguredAccessoryBrowser instance generating the event.
        ///
        /// Parameter `accessories`: The set of EAWiFiUnconfiguredAccessory objects that have been removed from the scan results since the last update.
        #[unsafe(method(accessoryBrowser:didRemoveUnconfiguredAccessories:))]
        #[unsafe(method_family = none)]
        unsafe fn accessoryBrowser_didRemoveUnconfiguredAccessories(
            &self,
            browser: &EAWiFiUnconfiguredAccessoryBrowser,
            accessories: &NSSet<EAWiFiUnconfiguredAccessory>,
        );

        #[cfg(feature = "EAWiFiUnconfiguredAccessory")]
        /// Invoked whenever the EAWiFiUnconfiguredAccessoryBrowser has completed configuring the selected EAWiFiUnconfiguredAccessory.
        ///
        ///
        /// Parameter `browser`: The EAWiFiUnconfiguredAccessoryBrowser instance generating the event.
        ///
        /// Parameter `accessory`: The EAWiFiUnconfiguredAccessory whose configuration process has completed.
        ///
        /// Parameter `status`: The status of the configuration process that has completed.
        #[unsafe(method(accessoryBrowser:didFinishConfiguringAccessory:withStatus:))]
        #[unsafe(method_family = none)]
        unsafe fn accessoryBrowser_didFinishConfiguringAccessory_withStatus(
            &self,
            browser: &EAWiFiUnconfiguredAccessoryBrowser,
            accessory: &EAWiFiUnconfiguredAccessory,
            status: EAWiFiUnconfiguredAccessoryConfigurationStatus,
        );
    }
);