blob: 9b0fe62489b6368d4bd891d5e6438e30dde8636d [file] [log] [blame]
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
public struct NSCocoaError : RawRepresentable, ErrorProtocol, __BridgedNSError {
public let rawValue: Int
public init(rawValue: Int) {
self.rawValue = rawValue
}
public static var __NSErrorDomain: String { return NSCocoaErrorDomain }
}
/// Enumeration that describes the error codes within the Cocoa error
/// domain.
public extension NSCocoaError {
public static var FileNoSuchFileError: NSCocoaError {
return NSCocoaError(rawValue: 4)
}
public static var FileLockingError: NSCocoaError {
return NSCocoaError(rawValue: 255)
}
public static var FileReadUnknownError: NSCocoaError {
return NSCocoaError(rawValue: 256)
}
public static var FileReadNoPermissionError: NSCocoaError {
return NSCocoaError(rawValue: 257)
}
public static var FileReadInvalidFileNameError: NSCocoaError {
return NSCocoaError(rawValue: 258)
}
public static var FileReadCorruptFileError: NSCocoaError {
return NSCocoaError(rawValue: 259)
}
public static var FileReadNoSuchFileError: NSCocoaError {
return NSCocoaError(rawValue: 260)
}
public static var FileReadInapplicableStringEncodingError: NSCocoaError {
return NSCocoaError(rawValue: 261)
}
public static var FileReadUnsupportedSchemeError: NSCocoaError {
return NSCocoaError(rawValue: 262)
}
public static var FileReadTooLargeError: NSCocoaError {
return NSCocoaError(rawValue: 263)
}
public static var FileReadUnknownStringEncodingError: NSCocoaError {
return NSCocoaError(rawValue: 264)
}
public static var FileWriteUnknownError: NSCocoaError {
return NSCocoaError(rawValue: 512)
}
public static var FileWriteNoPermissionError: NSCocoaError {
return NSCocoaError(rawValue: 513)
}
public static var FileWriteInvalidFileNameError: NSCocoaError {
return NSCocoaError(rawValue: 514)
}
public static var FileWriteFileExistsError: NSCocoaError {
return NSCocoaError(rawValue: 516)
}
public static var FileWriteInapplicableStringEncodingError: NSCocoaError {
return NSCocoaError(rawValue: 517)
}
public static var FileWriteUnsupportedSchemeError: NSCocoaError {
return NSCocoaError(rawValue: 518)
}
public static var FileWriteOutOfSpaceError: NSCocoaError {
return NSCocoaError(rawValue: 640)
}
public static var FileWriteVolumeReadOnlyError: NSCocoaError {
return NSCocoaError(rawValue: 642)
}
public static var FileManagerUnmountUnknownError: NSCocoaError {
return NSCocoaError(rawValue: 768)
}
public static var FileManagerUnmountBusyError: NSCocoaError {
return NSCocoaError(rawValue: 769)
}
public static var KeyValueValidationError: NSCocoaError {
return NSCocoaError(rawValue: 1024)
}
public static var FormattingError: NSCocoaError {
return NSCocoaError(rawValue: 2048)
}
public static var UserCancelledError: NSCocoaError {
return NSCocoaError(rawValue: 3072)
}
public static var FeatureUnsupportedError: NSCocoaError {
return NSCocoaError(rawValue: 3328)
}
public static var ExecutableNotLoadableError: NSCocoaError {
return NSCocoaError(rawValue: 3584)
}
public static var ExecutableArchitectureMismatchError: NSCocoaError {
return NSCocoaError(rawValue: 3585)
}
public static var ExecutableRuntimeMismatchError: NSCocoaError {
return NSCocoaError(rawValue: 3586)
}
public static var ExecutableLoadError: NSCocoaError {
return NSCocoaError(rawValue: 3587)
}
public static var ExecutableLinkError: NSCocoaError {
return NSCocoaError(rawValue: 3588)
}
public static var PropertyListReadCorruptError: NSCocoaError {
return NSCocoaError(rawValue: 3840)
}
public static var PropertyListReadUnknownVersionError: NSCocoaError {
return NSCocoaError(rawValue: 3841)
}
public static var PropertyListReadStreamError: NSCocoaError {
return NSCocoaError(rawValue: 3842)
}
public static var PropertyListWriteStreamError: NSCocoaError {
return NSCocoaError(rawValue: 3851)
}
public static var PropertyListWriteInvalidError: NSCocoaError {
return NSCocoaError(rawValue: 3852)
}
public static var XPCConnectionInterrupted: NSCocoaError {
return NSCocoaError(rawValue: 4097)
}
public static var XPCConnectionInvalid: NSCocoaError {
return NSCocoaError(rawValue: 4099)
}
public static var XPCConnectionReplyInvalid: NSCocoaError {
return NSCocoaError(rawValue: 4101)
}
public static var UbiquitousFileUnavailableError: NSCocoaError {
return NSCocoaError(rawValue: 4353)
}
public static var UbiquitousFileNotUploadedDueToQuotaError: NSCocoaError {
return NSCocoaError(rawValue: 4354)
}
public static var UbiquitousFileUbiquityServerNotAvailable: NSCocoaError {
return NSCocoaError(rawValue: 4355)
}
public static var UserActivityHandoffFailedError: NSCocoaError {
return NSCocoaError(rawValue: 4608)
}
public static var UserActivityConnectionUnavailableError: NSCocoaError {
return NSCocoaError(rawValue: 4609)
}
public static var UserActivityRemoteApplicationTimedOutError: NSCocoaError {
return NSCocoaError(rawValue: 4610)
}
public static var UserActivityHandoffUserInfoTooLargeError: NSCocoaError {
return NSCocoaError(rawValue: 4611)
}
public static var CoderReadCorruptError: NSCocoaError {
return NSCocoaError(rawValue: 4864)
}
public static var CoderValueNotFoundError: NSCocoaError {
return NSCocoaError(rawValue: 4865)
}
public var isCoderError: Bool {
return rawValue >= 4864 && rawValue <= 4991;
}
public var isExecutableError: Bool {
return rawValue >= 3584 && rawValue <= 3839;
}
public var isFileError: Bool {
return rawValue >= 0 && rawValue <= 1023;
}
public var isFormattingError: Bool {
return rawValue >= 2048 && rawValue <= 2559;
}
public var isPropertyListError: Bool {
return rawValue >= 3840 && rawValue <= 4095;
}
public var isUbiquitousFileError: Bool {
return rawValue >= 4352 && rawValue <= 4607;
}
public var isUserActivityError: Bool {
return rawValue >= 4608 && rawValue <= 4863;
}
public var isValidationError: Bool {
return rawValue >= 1024 && rawValue <= 2047;
}
public var isXPCConnectionError: Bool {
return rawValue >= 4096 && rawValue <= 4224;
}
}
#if os(OSX) || os(iOS)
import Darwin
#elseif os(Linux)
import Glibc
#endif
internal func _NSErrorWithErrno(posixErrno : Int32, reading : Bool, path : String? = nil, url : NSURL? = nil, extraUserInfo : [String : Any]? = nil) -> NSError {
var cocoaError : NSCocoaError
if reading {
switch posixErrno {
case EFBIG: cocoaError = NSCocoaError.FileReadTooLargeError
case ENOENT: cocoaError = NSCocoaError.FileReadNoSuchFileError
case EPERM, EACCES: cocoaError = NSCocoaError.FileReadNoPermissionError
case ENAMETOOLONG: cocoaError = NSCocoaError.FileReadUnknownError
default: cocoaError = NSCocoaError.FileReadUnknownError
}
} else {
switch posixErrno {
case ENOENT: cocoaError = NSCocoaError.FileNoSuchFileError
case EPERM, EACCES: cocoaError = NSCocoaError.FileWriteNoPermissionError
case ENAMETOOLONG: cocoaError = NSCocoaError.FileWriteInvalidFileNameError
case EDQUOT, ENOSPC: cocoaError = NSCocoaError.FileWriteOutOfSpaceError
case EROFS: cocoaError = NSCocoaError.FileWriteVolumeReadOnlyError
case EEXIST: cocoaError = NSCocoaError.FileWriteFileExistsError
default: cocoaError = NSCocoaError.FileWriteUnknownError
}
}
var userInfo = extraUserInfo ?? [String : Any]()
if let path = path {
userInfo[NSFilePathErrorKey] = path._nsObject
} else if let url = url {
userInfo[NSURLErrorKey] = url
}
return NSError(domain: NSCocoaErrorDomain, code: cocoaError.rawValue, userInfo: userInfo)
}