     func positionLocationManager(_ positionLocationManager: PositionLocationManager, didVisit visit: CLVisit?)
 }
 
-// MARK: - constants
-
-private let OneShotRequestTimeOut: TimeInterval = 0.5 * 60.0
-private let PositionRequestQueueIdentifier = "PositionRequestQueueIdentifier"
-private let PositionRequestQueueSpecificKey = DispatchSpecificKey<()>()
-
 // MARK: - PositionLocationManager
 
 internal class PositionLocationManager: NSObject {
+
+    // MARK: - types
+    
+    internal static let OneShotRequestTimeOut: TimeInterval = 0.5 * 60.0
+    internal static let RequestQueueIdentifier = "PositionRequestQueueIdentifier"
+    internal static let RequestQueueSpecificKey = DispatchSpecificKey<()>()
 
     internal weak var delegate: PositionLocationManagerDelegate?
     


extension PositionLocationManager {
   
    internal func performOneShotLocationUpdate(withDesiredAccuracy desiredAccuracy: Double, completionHandler: @escaping OneShotCompletionHandler) {
        if self.locationServicesStatus == .allowedAlways ||
            self.locationServicesStatus == .allowedWhenInUse {
            
            self.executeClosureAsyncOnRequestQueueIfNecessary {
                let request = PositionLocationRequest()
                request.desiredAccuracy = desiredAccuracy
                request.lifespan = OneShotRequestTimeOut
                request.timeOutHandler = {
                    self.processLocationRequests()
                }

        }
        
        for request in completeRequests {
            guard request.isCompleted == false else {
                continue
            }
            request.isCompleted = true
            if request.isExpired {
                self.executeClosureSyncOnMainQueueIfNecessary {
                    request.completionHandler?(.failure(PositionErrorType.timedOut))
                }
            } else {
                if let location = self.locations?.first {
                    self.executeClosureSyncOnMainQueueIfNecessary {
                        request.completionHandler?(.success(location))
                    }
                } else {
                    self.executeClosureSyncOnMainQueueIfNecessary {
                        request.completionHandler?(.failure(PositionErrorType.timedOut))
                    }
                }
            }
