//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

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

unsafe impl Send for LAEnvironmentMechanism {}

unsafe impl Sync for LAEnvironmentMechanism {}

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

impl LAEnvironmentMechanism {
    extern_methods!(
        /// Clients should only consume environment mechanisms..
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;

        /// The Clients should only consume environment mechanisms..
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        /// Whether the mechanism is available for use, i.e. whether the relevant preflight call of
        /// `canEvaluatePolicy`would succeed.
        ///
        /// Warning: If
        /// `isUsable`reads
        /// `NO,`do not assume that it's because of some particular reason. You should check
        /// properties of the subclass to determine why mechanism can't be used.
        #[unsafe(method(isUsable))]
        #[unsafe(method_family = none)]
        pub unsafe fn isUsable(&self) -> bool;

        /// The localized name of the authentication mechanism, e.g. "Touch ID", "Face ID" etc.
        #[unsafe(method(localizedName))]
        #[unsafe(method_family = none)]
        pub unsafe fn localizedName(&self) -> Retained<NSString>;

        /// Name of the SF Symbol representing this authentication mechanism.
        #[unsafe(method(iconSystemName))]
        #[unsafe(method_family = none)]
        pub unsafe fn iconSystemName(&self) -> Retained<NSString>;
    );
}
