objc2-home-kit 0.3.2

Bindings to the HomeKit framework
Documentation
//! 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!(
    /// This class is used to discover new accessories in the home
    /// that have never been paired with and therefore not part of the home.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/homekit/hmaccessorybrowser?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct HMAccessoryBrowser;
);

unsafe impl Send for HMAccessoryBrowser {}

unsafe impl Sync for HMAccessoryBrowser {}

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

impl HMAccessoryBrowser {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        /// Delegate that receives updates on the state of the accessories discovered.
        ///
        /// This property is not atomic.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[unsafe(method(delegate))]
        #[unsafe(method_family = none)]
        pub unsafe fn delegate(
            &self,
        ) -> Option<Retained<ProtocolObject<dyn HMAccessoryBrowserDelegate>>>;

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

        #[cfg(feature = "HMAccessory")]
        /// This is the array of HMAccessory objects that represents new
        /// accessories that were discovered as part of a search session.
        /// This array is not updated when a search session is not in progress.
        ///
        /// This property is not atomic.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[unsafe(method(discoveredAccessories))]
        #[unsafe(method_family = none)]
        pub unsafe fn discoveredAccessories(&self) -> Retained<NSArray<HMAccessory>>;

        /// Starts searching for accessories that are not associated to any home.
        ///
        ///
        /// If any accessories are discovered, updates are sent to the delegate.
        /// This will scan for the following types of accessories:
        /// Accessories supporting HomeKit Wireless Accessory Configuration profile
        /// Accessories supporting HomeKit Accessory Protocol and are already on
        /// the same infrastructure IP network
        /// Accessories supporting HomeKit Accessory Protocol on Bluetooth LE transport
        /// The array of discovered accessories will be updated when this method
        /// is called, so applications should clear and reload any stored copies
        /// of that array or previous new accessory objects.
        #[unsafe(method(startSearchingForNewAccessories))]
        #[unsafe(method_family = none)]
        pub unsafe fn startSearchingForNewAccessories(&self);

        /// Stops searching for new accessories.
        ///
        ///
        /// After this method is called, updates will not be sent to the delegate
        /// if new accessories are found or removed. Scanning may continue for system
        /// reasons or if other delegates are still in active searching sessions.
        /// The contents of the array of discovered accessories will not be updated until
        /// startSearchingForNewAccessories is called.
        #[unsafe(method(stopSearchingForNewAccessories))]
        #[unsafe(method_family = none)]
        pub unsafe fn stopSearchingForNewAccessories(&self);
    );
}

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

extern_protocol!(
    /// This delegate receives updates about new accessories in the home.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/homekit/hmaccessorybrowserdelegate?language=objc)
    pub unsafe trait HMAccessoryBrowserDelegate: NSObjectProtocol {
        #[cfg(feature = "HMAccessory")]
        /// Informs the delegate about new accessories discovered in the home.
        ///
        ///
        /// Parameter `browser`: Sender of the message.
        ///
        ///
        /// Parameter `accessory`: New accessory that was discovered.
        #[optional]
        #[unsafe(method(accessoryBrowser:didFindNewAccessory:))]
        #[unsafe(method_family = none)]
        unsafe fn accessoryBrowser_didFindNewAccessory(
            &self,
            browser: &HMAccessoryBrowser,
            accessory: &HMAccessory,
        );

        #[cfg(feature = "HMAccessory")]
        /// Informs the delegate about new accessories removed from the home.
        ///
        ///
        /// Parameter `browser`: Sender of the message.
        ///
        ///
        /// Parameter `accessory`: Accessory that was previously discovered but are no longer reachable.
        /// This method is also invoked when an accessory is added to a home.
        #[optional]
        #[unsafe(method(accessoryBrowser:didRemoveNewAccessory:))]
        #[unsafe(method_family = none)]
        unsafe fn accessoryBrowser_didRemoveNewAccessory(
            &self,
            browser: &HMAccessoryBrowser,
            accessory: &HMAccessory,
        );
    }
);