//! 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::*;

extern_protocol!(
    /// [Apple's documentation](https://developer.apple.com/documentation/corelocation/cllocationmanagerdelegate?language=objc)
    pub unsafe trait CLLocationManagerDelegate: NSObjectProtocol {
        #[cfg(all(feature = "CLLocation", feature = "CLLocationManager"))]
        #[deprecated = "Implement -locationManager:didUpdateLocations: instead"]
        #[optional]
        #[unsafe(method(locationManager:didUpdateToLocation:fromLocation:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didUpdateToLocation_fromLocation(
            &self,
            manager: &CLLocationManager,
            new_location: &CLLocation,
            old_location: &CLLocation,
        );

        #[cfg(all(feature = "CLLocation", feature = "CLLocationManager"))]
        #[optional]
        #[unsafe(method(locationManager:didUpdateLocations:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didUpdateLocations(
            &self,
            manager: &CLLocationManager,
            locations: &NSArray<CLLocation>,
        );

        #[cfg(all(feature = "CLHeading", feature = "CLLocationManager"))]
        #[optional]
        #[unsafe(method(locationManager:didUpdateHeading:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didUpdateHeading(
            &self,
            manager: &CLLocationManager,
            new_heading: &CLHeading,
        );

        #[cfg(feature = "CLLocationManager")]
        #[optional]
        #[unsafe(method(locationManagerShouldDisplayHeadingCalibration:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManagerShouldDisplayHeadingCalibration(
            &self,
            manager: &CLLocationManager,
        ) -> bool;

        #[cfg(all(feature = "CLLocationManager", feature = "CLRegion"))]
        #[optional]
        #[unsafe(method(locationManager:didDetermineState:forRegion:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didDetermineState_forRegion(
            &self,
            manager: &CLLocationManager,
            state: CLRegionState,
            region: &CLRegion,
        );

        #[cfg(all(
            feature = "CLBeaconRegion",
            feature = "CLLocationManager",
            feature = "CLRegion"
        ))]
        #[deprecated]
        #[optional]
        #[unsafe(method(locationManager:didRangeBeacons:inRegion:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didRangeBeacons_inRegion(
            &self,
            manager: &CLLocationManager,
            beacons: &NSArray<CLBeacon>,
            region: &CLBeaconRegion,
        );

        #[cfg(all(
            feature = "CLBeaconRegion",
            feature = "CLLocationManager",
            feature = "CLRegion"
        ))]
        #[deprecated]
        #[optional]
        #[unsafe(method(locationManager:rangingBeaconsDidFailForRegion:withError:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_rangingBeaconsDidFailForRegion_withError(
            &self,
            manager: &CLLocationManager,
            region: &CLBeaconRegion,
            error: &NSError,
        );

        #[cfg(all(
            feature = "CLBeaconIdentityCondition",
            feature = "CLBeaconIdentityConstraint",
            feature = "CLBeaconRegion",
            feature = "CLCondition",
            feature = "CLLocationManager"
        ))]
        #[optional]
        #[unsafe(method(locationManager:didRangeBeacons:satisfyingConstraint:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didRangeBeacons_satisfyingConstraint(
            &self,
            manager: &CLLocationManager,
            beacons: &NSArray<CLBeacon>,
            beacon_constraint: &CLBeaconIdentityConstraint,
        );

        #[cfg(all(
            feature = "CLBeaconIdentityCondition",
            feature = "CLBeaconIdentityConstraint",
            feature = "CLCondition",
            feature = "CLLocationManager"
        ))]
        #[optional]
        #[unsafe(method(locationManager:didFailRangingBeaconsForConstraint:error:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didFailRangingBeaconsForConstraint_error(
            &self,
            manager: &CLLocationManager,
            beacon_constraint: &CLBeaconIdentityConstraint,
            error: &NSError,
        );

        #[cfg(all(feature = "CLLocationManager", feature = "CLRegion"))]
        #[optional]
        #[unsafe(method(locationManager:didEnterRegion:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didEnterRegion(
            &self,
            manager: &CLLocationManager,
            region: &CLRegion,
        );

        #[cfg(all(feature = "CLLocationManager", feature = "CLRegion"))]
        #[optional]
        #[unsafe(method(locationManager:didExitRegion:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didExitRegion(
            &self,
            manager: &CLLocationManager,
            region: &CLRegion,
        );

        #[cfg(feature = "CLLocationManager")]
        #[optional]
        #[unsafe(method(locationManager:didFailWithError:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didFailWithError(
            &self,
            manager: &CLLocationManager,
            error: &NSError,
        );

        #[cfg(all(feature = "CLLocationManager", feature = "CLRegion"))]
        #[optional]
        #[unsafe(method(locationManager:monitoringDidFailForRegion:withError:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_monitoringDidFailForRegion_withError(
            &self,
            manager: &CLLocationManager,
            region: Option<&CLRegion>,
            error: &NSError,
        );

        #[cfg(feature = "CLLocationManager")]
        #[deprecated]
        #[optional]
        #[unsafe(method(locationManager:didChangeAuthorizationStatus:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didChangeAuthorizationStatus(
            &self,
            manager: &CLLocationManager,
            status: CLAuthorizationStatus,
        );

        #[cfg(feature = "CLLocationManager")]
        #[optional]
        #[unsafe(method(locationManagerDidChangeAuthorization:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManagerDidChangeAuthorization(&self, manager: &CLLocationManager);

        #[cfg(all(feature = "CLLocationManager", feature = "CLRegion"))]
        #[optional]
        #[unsafe(method(locationManager:didStartMonitoringForRegion:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didStartMonitoringForRegion(
            &self,
            manager: &CLLocationManager,
            region: &CLRegion,
        );

        #[cfg(feature = "CLLocationManager")]
        #[optional]
        #[unsafe(method(locationManagerDidPauseLocationUpdates:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManagerDidPauseLocationUpdates(&self, manager: &CLLocationManager);

        #[cfg(feature = "CLLocationManager")]
        #[optional]
        #[unsafe(method(locationManagerDidResumeLocationUpdates:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManagerDidResumeLocationUpdates(&self, manager: &CLLocationManager);

        #[cfg(feature = "CLLocationManager")]
        #[optional]
        #[unsafe(method(locationManager:didFinishDeferredUpdatesWithError:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didFinishDeferredUpdatesWithError(
            &self,
            manager: &CLLocationManager,
            error: Option<&NSError>,
        );

        #[cfg(all(feature = "CLLocationManager", feature = "CLVisit"))]
        #[optional]
        #[unsafe(method(locationManager:didVisit:))]
        #[unsafe(method_family = none)]
        unsafe fn locationManager_didVisit(&self, manager: &CLLocationManager, visit: &CLVisit);
    }
);
