objc2-ar-kit 0.3.2

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

/// Keeps track of where an altitude value came from and informs the user about the expected accuracy.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/arkit/araltitudesource?language=objc)
// NS_ENUM
#[cfg(feature = "objc2")]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ARAltitudeSource(pub NSInteger);
#[cfg(feature = "objc2")]
impl ARAltitudeSource {
    /// Altitude could not be determined (yet).
    #[doc(alias = "ARAltitudeSourceUnknown")]
    pub const Unknown: Self = Self(0);
    /// ARKit determined altitude based on a coarse digital elevation model. The provided value is too imprecise to be used at close range, but is sufficient to anchor far away content.
    #[doc(alias = "ARAltitudeSourceCoarse")]
    pub const Coarse: Self = Self(1);
    /// ARKit determined altitude based on a high resolution digital elevation model.
    #[doc(alias = "ARAltitudeSourcePrecise")]
    pub const Precise: Self = Self(2);
    /// Altitude was provided by the user.
    #[doc(alias = "ARAltitudeSourceUserDefined")]
    pub const UserDefined: Self = Self(3);
}

#[cfg(feature = "objc2")]
unsafe impl Encode for ARAltitudeSource {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

#[cfg(feature = "objc2")]
unsafe impl RefEncode for ARAltitudeSource {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// A value describing geo tracking state.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/arkit/argeotrackingstate?language=objc)
// NS_ENUM
#[cfg(feature = "objc2")]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ARGeoTrackingState(pub NSInteger);
#[cfg(feature = "objc2")]
impl ARGeoTrackingState {
    /// Geo tracking is not available.
    #[doc(alias = "ARGeoTrackingStateNotAvailable")]
    pub const NotAvailable: Self = Self(0);
    /// Geo tracking is being initialized.
    #[doc(alias = "ARGeoTrackingStateInitializing")]
    pub const Initializing: Self = Self(1);
    /// Geo tracking is attempting to localize against a Map.
    #[doc(alias = "ARGeoTrackingStateLocalizing")]
    pub const Localizing: Self = Self(2);
    /// Geo tracking is localized.
    #[doc(alias = "ARGeoTrackingStateLocalized")]
    pub const Localized: Self = Self(3);
}

#[cfg(feature = "objc2")]
unsafe impl Encode for ARGeoTrackingState {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

#[cfg(feature = "objc2")]
unsafe impl RefEncode for ARGeoTrackingState {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// A value describing geo tracking accuracy.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/arkit/argeotrackingaccuracy?language=objc)
// NS_ENUM
#[cfg(feature = "objc2")]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ARGeoTrackingAccuracy(pub NSInteger);
#[cfg(feature = "objc2")]
impl ARGeoTrackingAccuracy {
    /// Geo tracking has not localized yet. Accuracy is indeterminate.
    #[doc(alias = "ARGeoTrackingAccuracyUndetermined")]
    pub const Undetermined: Self = Self(0);
    /// Localized with low accuracy.
    #[doc(alias = "ARGeoTrackingAccuracyLow")]
    pub const Low: Self = Self(1);
    /// Localized with medium accuracy.
    #[doc(alias = "ARGeoTrackingAccuracyMedium")]
    pub const Medium: Self = Self(2);
    /// Localized with high accuracy.
    #[doc(alias = "ARGeoTrackingAccuracyHigh")]
    pub const High: Self = Self(3);
}

#[cfg(feature = "objc2")]
unsafe impl Encode for ARGeoTrackingAccuracy {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

#[cfg(feature = "objc2")]
unsafe impl RefEncode for ARGeoTrackingAccuracy {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// Reasons for geo tracking failure states.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/arkit/argeotrackingstatereason?language=objc)
// NS_ENUM
#[cfg(feature = "objc2")]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ARGeoTrackingStateReason(pub NSInteger);
#[cfg(feature = "objc2")]
impl ARGeoTrackingStateReason {
    /// No issues reported.
    #[doc(alias = "ARGeoTrackingStateReasonNone")]
    pub const None: Self = Self(0);
    /// Geo tracking is not available at the location.
    #[doc(alias = "ARGeoTrackingStateReasonNotAvailableAtLocation")]
    pub const NotAvailableAtLocation: Self = Self(1);
    /// Geo tracking needs location permissions from the user.
    #[doc(alias = "ARGeoTrackingStateReasonNeedLocationPermissions")]
    pub const NeedLocationPermissions: Self = Self(2);
    /// World tracking pose is not valid yet.
    #[doc(alias = "ARGeoTrackingStateReasonWorldTrackingUnstable")]
    pub const WorldTrackingUnstable: Self = Self(3);
    /// Waiting for a location point that meets accuracy threshold before starting geo tracking.
    #[doc(alias = "ARGeoTrackingStateReasonWaitingForLocation")]
    pub const WaitingForLocation: Self = Self(4);
    /// Waiting for availability check on first location point to complete.
    #[doc(alias = "ARGeoTrackingStateReasonWaitingForAvailabilityCheck")]
    pub const WaitingForAvailabilityCheck: Self = Self(5);
    /// Geo tracking data hasn't been downloaded yet.
    #[doc(alias = "ARGeoTrackingStateReasonGeoDataNotLoaded")]
    pub const GeoDataNotLoaded: Self = Self(6);
    /// The device is pointed at an angle too far down to use geo tracking.
    #[doc(alias = "ARGeoTrackingStateReasonDevicePointedTooLow")]
    pub const DevicePointedTooLow: Self = Self(7);
    /// Visual localization failed, but no errors were found in the input.
    #[doc(alias = "ARGeoTrackingStateReasonVisualLocalizationFailed")]
    pub const VisualLocalizationFailed: Self = Self(8);
}

#[cfg(feature = "objc2")]
unsafe impl Encode for ARGeoTrackingStateReason {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

#[cfg(feature = "objc2")]
unsafe impl RefEncode for ARGeoTrackingStateReason {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

#[cfg(feature = "objc2")]
extern_class!(
    /// Collection of fields to give information on geo tracking status.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/arkit/argeotrackingstatus?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(feature = "objc2")]
    pub struct ARGeoTrackingStatus;
);

#[cfg(feature = "objc2")]
unsafe impl Send for ARGeoTrackingStatus {}

#[cfg(feature = "objc2")]
unsafe impl Sync for ARGeoTrackingStatus {}

#[cfg(all(feature = "objc2", feature = "objc2-foundation"))]
extern_conformance!(
    unsafe impl NSCoding for ARGeoTrackingStatus {}
);

#[cfg(all(feature = "objc2", feature = "objc2-foundation"))]
extern_conformance!(
    unsafe impl NSCopying for ARGeoTrackingStatus {}
);

#[cfg(all(feature = "objc2", feature = "objc2-foundation"))]
unsafe impl CopyingHelper for ARGeoTrackingStatus {
    type Result = Self;
}

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

#[cfg(all(feature = "objc2", feature = "objc2-foundation"))]
extern_conformance!(
    unsafe impl NSSecureCoding for ARGeoTrackingStatus {}
);

#[cfg(feature = "objc2")]
impl ARGeoTrackingStatus {
    extern_methods!(
        /// The state of geo tracking.
        ///
        /// This property is not atomic.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[unsafe(method(state))]
        #[unsafe(method_family = none)]
        pub unsafe fn state(&self) -> ARGeoTrackingState;

        /// The accuracy of geo tracking.
        ///
        /// This property is not atomic.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[unsafe(method(accuracy))]
        #[unsafe(method_family = none)]
        pub unsafe fn accuracy(&self) -> ARGeoTrackingAccuracy;

        /// Reason for geo tracking state.
        ///
        /// This property is not atomic.
        ///
        /// # Safety
        ///
        /// This might not be thread-safe.
        #[unsafe(method(stateReason))]
        #[unsafe(method_family = none)]
        pub unsafe fn stateReason(&self) -> ARGeoTrackingStateReason;

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