objc2-authentication-services 0.3.2

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

/// A string indicating a transport for communicating with an authenticator.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/authenticationservices/asauthorizationsecuritykeypublickeycredentialdescriptortransport?language=objc)
// NS_TYPED_EXTENSIBLE_ENUM
pub type ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport = NSString;

extern "C" {
    /// Indicates using USB or Lightning to communicate with an authenticator.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/authenticationservices/asauthorizationsecuritykeypublickeycredentialdescriptortransportusb?language=objc)
    pub static ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransportUSB:
        &'static ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport;
}

extern "C" {
    /// Indiciates using NFC to communicate with an authenticator.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/authenticationservices/asauthorizationsecuritykeypublickeycredentialdescriptortransportnfc?language=objc)
    pub static ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransportNFC:
        &'static ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport;
}

extern "C" {
    /// Indicates using Bluetooth, including BLE, to communicate with an authenticator.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/authenticationservices/asauthorizationsecuritykeypublickeycredentialdescriptortransportbluetooth?language=objc)
    pub static ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransportBluetooth:
        &'static ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport;
}

/// Returns a list of all transports the device currently supports for communicating with an authenticator.
#[inline]
pub unsafe extern "C-unwind" fn ASAuthorizationAllSupportedPublicKeyCredentialDescriptorTransports(
) -> Retained<NSArray<ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport>> {
    extern "C-unwind" {
        fn ASAuthorizationAllSupportedPublicKeyCredentialDescriptorTransports(
        ) -> *mut NSArray<ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport>;
    }
    let ret = unsafe { ASAuthorizationAllSupportedPublicKeyCredentialDescriptorTransports() };
    unsafe { Retained::retain_autoreleased(ret) }
        .expect("function was marked as returning non-null, but actually returned NULL")
}

extern_class!(
    /// An object to describe a credential on a security key.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/authenticationservices/asauthorizationsecuritykeypublickeycredentialdescriptor?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct ASAuthorizationSecurityKeyPublicKeyCredentialDescriptor;
);

#[cfg(feature = "ASAuthorizationPublicKeyCredentialDescriptor")]
extern_conformance!(
    unsafe impl ASAuthorizationPublicKeyCredentialDescriptor
        for ASAuthorizationSecurityKeyPublicKeyCredentialDescriptor
    {
    }
);

extern_conformance!(
    unsafe impl NSCoding for ASAuthorizationSecurityKeyPublicKeyCredentialDescriptor {}
);

extern_conformance!(
    unsafe impl NSCopying for ASAuthorizationSecurityKeyPublicKeyCredentialDescriptor {}
);

unsafe impl CopyingHelper for ASAuthorizationSecurityKeyPublicKeyCredentialDescriptor {
    type Result = Self;
}

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

extern_conformance!(
    unsafe impl NSSecureCoding for ASAuthorizationSecurityKeyPublicKeyCredentialDescriptor {}
);

impl ASAuthorizationSecurityKeyPublicKeyCredentialDescriptor {
    extern_methods!(
        #[unsafe(method(initWithCredentialID:transports:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCredentialID_transports(
            this: Allocated<Self>,
            credential_id: &NSData,
            allowed_transports: &NSArray<
                ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport,
            >,
        ) -> Retained<Self>;

        /// An array indicating transports for the credential indicated by credentialID.
        #[unsafe(method(transports))]
        #[unsafe(method_family = none)]
        pub unsafe fn transports(
            &self,
        ) -> Retained<NSArray<ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport>>;

        /// Setter for [`transports`][Self::transports].
        #[unsafe(method(setTransports:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setTransports(
            &self,
            transports: &NSArray<ASAuthorizationSecurityKeyPublicKeyCredentialDescriptorTransport>,
        );

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

        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
    );
}