objc2-car-play 0.3.2

Bindings to the CarPlay 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 crate::*;

/// [Apple's documentation](https://developer.apple.com/documentation/carplay/cplimitableuserinterface?language=objc)
// NS_OPTIONS
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct CPLimitableUserInterface(pub NSUInteger);
bitflags::bitflags! {
    impl CPLimitableUserInterface: NSUInteger {
        #[doc(alias = "CPLimitableUserInterfaceKeyboard")]
        const Keyboard = 1<<0;
        #[doc(alias = "CPLimitableUserInterfaceLists")]
        const Lists = 1<<1;
    }
}

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

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

/// [Apple's documentation](https://developer.apple.com/documentation/carplay/cpcontentstyle?language=objc)
// NS_OPTIONS
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct CPContentStyle(pub NSUInteger);
bitflags::bitflags! {
    impl CPContentStyle: NSUInteger {
        #[doc(alias = "CPContentStyleLight")]
        const Light = 1<<0;
        #[doc(alias = "CPContentStyleDark")]
        const Dark = 1<<1;
    }
}

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

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

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/carplay/cpsessionconfiguration?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct CPSessionConfiguration;
);

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

impl CPSessionConfiguration {
    extern_methods!(
        #[unsafe(method(initWithDelegate:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDelegate(
            this: Allocated<Self>,
            delegate: &ProtocolObject<dyn CPSessionConfigurationDelegate>,
        ) -> Retained<Self>;

        #[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>;

        #[unsafe(method(limitedUserInterfaces))]
        #[unsafe(method_family = none)]
        pub unsafe fn limitedUserInterfaces(&self) -> CPLimitableUserInterface;

        #[unsafe(method(contentStyle))]
        #[unsafe(method_family = none)]
        pub unsafe fn contentStyle(&self) -> CPContentStyle;

        #[unsafe(method(delegate))]
        #[unsafe(method_family = none)]
        pub unsafe fn delegate(
            &self,
            mtm: MainThreadMarker,
        ) -> Option<Retained<ProtocolObject<dyn CPSessionConfigurationDelegate>>>;

        /// 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 CPSessionConfigurationDelegate>>,
        );
    );
}

extern_protocol!(
    /// [Apple's documentation](https://developer.apple.com/documentation/carplay/cpsessionconfigurationdelegate?language=objc)
    pub unsafe trait CPSessionConfigurationDelegate:
        NSObjectProtocol + MainThreadOnly
    {
        #[optional]
        #[unsafe(method(sessionConfiguration:limitedUserInterfacesChanged:))]
        #[unsafe(method_family = none)]
        unsafe fn sessionConfiguration_limitedUserInterfacesChanged(
            &self,
            session_configuration: &CPSessionConfiguration,
            limited_user_interfaces: CPLimitableUserInterface,
        );

        #[optional]
        #[unsafe(method(sessionConfiguration:contentStyleChanged:))]
        #[unsafe(method_family = none)]
        unsafe fn sessionConfiguration_contentStyleChanged(
            &self,
            session_configuration: &CPSessionConfiguration,
            content_style: CPContentStyle,
        );
    }
);