objc2-core-midi 0.3.2

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

use crate::*;

extern "C" {
    /// A notification posted when a MIDI-CI Device has been added to the subsystem.
    ///
    ///
    /// The userInfo dictionary will contain a MIDICIDeviceObjectKey with the
    /// MIDI-CI Device which has been added to the subsystem.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/coremidi/midicidevicewasaddednotification?language=objc)
    #[cfg(feature = "objc2-foundation")]
    pub static MIDICIDeviceWasAddedNotification: &'static NSNotificationName;
}

extern "C" {
    /// A notification posted when a MIDI-CI Device has been removed or has had its MUID invalidated.
    ///
    ///
    /// Any previously discovered MIDICIDevice that fails to respond to a discovery message
    /// will be removed. The userInfo dictionary will contain a MIDICIDeviceObjectKey with the
    /// MIDI-CI Device which has been removed or has had its MUID invalidated.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/coremidi/midicidevicewasremovednotification?language=objc)
    #[cfg(feature = "objc2-foundation")]
    pub static MIDICIDeviceWasRemovedNotification: &'static NSNotificationName;
}

extern "C" {
    /// A notification posted when a MIDI-CI Device has been enabled/disabled or updated.
    ///
    ///
    /// The userInfo dictionary will contain a MIDICIDeviceObjectKey and
    /// MIDICIProfileObjectKey with the MIDICIDevice and MIDI-CI Profile which
    /// was recently enabled or disabled.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/coremidi/midiciprofilewasupdatednotification?language=objc)
    #[cfg(feature = "objc2-foundation")]
    pub static MIDICIProfileWasUpdatedNotification: &'static NSNotificationName;
}

extern "C" {
    /// A notification posted when a MIDI-CI Device has been removed.
    ///
    ///
    /// The userInfo dictionary will contain a MIDICIDeviceObjectKey and
    /// MIDICIProfileObjectKey with the MIDICIDevice and MIDI-CI Profile which
    /// has been removed.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/coremidi/midiciprofilewasremovednotification?language=objc)
    #[cfg(feature = "objc2-foundation")]
    pub static MIDICIProfileWasRemovedNotification: &'static NSNotificationName;
}

/// [Apple's documentation](https://developer.apple.com/documentation/coremidi/midicidevicemanagerdictionarykey?language=objc)
// NS_TYPED_ENUM
#[cfg(feature = "objc2-foundation")]
pub type MIDICIDeviceManagerDictionaryKey = NSString;

extern "C" {
    /// Value is an MIDIUMPEndpoint.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/coremidi/midicideviceobjectkey?language=objc)
    #[cfg(feature = "objc2-foundation")]
    pub static MIDICIDeviceObjectKey: &'static MIDICIDeviceManagerDictionaryKey;
}

extern "C" {
    /// Value is an MIDIUMPCIProfile
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/coremidi/midiciprofileobjectkey?language=objc)
    #[cfg(feature = "objc2-foundation")]
    pub static MIDICIProfileObjectKey: &'static MIDICIDeviceManagerDictionaryKey;
}

#[cfg(feature = "objc2")]
extern_class!(
    /// A singleton object that performs system-wide MIDI-CI Device bookkeeping.
    ///
    ///
    /// MIDICIDeviceManager is used to retrieve information about MIDI-CI devices that
    /// to MIDI-CI Discovery.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/coremidi/midicidevicemanager?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(feature = "objc2")]
    pub struct MIDICIDeviceManager;
);

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

#[cfg(feature = "objc2")]
impl MIDICIDeviceManager {
    extern_methods!(
        /// Retrieve the shared MIDI-CI device manager for the client process.
        ///
        ///
        /// After the first access of the property, the client process may observe notifications which are
        /// posted when the system-wide cache changes. In environments where virtual MIDI endpoint
        /// creation is not allowed, callbacks are only invoked when the process is not suspended.
        /// However, any suspended process will receive an updated copy of the cache when it
        /// resumes its running state.
        #[unsafe(method(sharedInstance))]
        #[unsafe(method_family = none)]
        pub unsafe fn sharedInstance() -> Retained<MIDICIDeviceManager>;

        #[cfg(all(feature = "MIDICIDevice", feature = "objc2-foundation"))]
        /// A list of MIDICIDevices that responded to the last MIDI-CI discovery request.
        #[unsafe(method(discoveredCIDevices))]
        #[unsafe(method_family = none)]
        pub unsafe fn discoveredCIDevices(&self) -> Retained<NSArray<MIDICIDevice>>;
    );
}

/// Methods declared on superclass `NSObject`.
#[cfg(feature = "objc2")]
impl MIDICIDeviceManager {
    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>;
    );
}