Skip to content

Commit 4fd7823

Browse files
committed
[SE-0112] Retain the underlying NSError in NSCocoaError.
NSCocoaError was capturing only the code of a Cocoa error, making it basically useless. Instead, capture the entire NSError, the code of which is tracked by an nested, RawRepresentable type Code. Provide typed accessors for the common keys in the Cocoa error domain, e.g., NSFilePathErrorKey, NSStringEncodingErrorKey, NSUnderlyingErrorKey, and NSURLErrorKey, to make this type easier to use. This is specifically an implementation of part (4) of the proposed solution to SE-0112, which makes NSCocoaError more usable. It also adds localizedDescription to ErrorProtocol. However, it also introduces the infrastructure needed for importing error enumeration types more smoothly, e.g., ErrorCodeProtocol (underscored for now), the ~= operator for matching error codes, and so on. In essence, NSCocoaError is the pattern that the importer will follow.
1 parent 0bcf4e6 commit 4fd7823

File tree

4 files changed

+846
-331
lines changed

4 files changed

+846
-331
lines changed
Lines changed: 72 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,112 @@
1+
extension NSCocoaError.Code {
2+
public static var textReadInapplicableDocumentTypeError: NSCocoaError.Code {
3+
return NSCocoaError.Code(rawValue: 65806)
4+
}
5+
public static var textWriteInapplicableDocumentTypeError: NSCocoaError.Code {
6+
return NSCocoaError.Code(rawValue: 66062)
7+
}
8+
public static var serviceApplicationNotFoundError: NSCocoaError.Code {
9+
return NSCocoaError.Code(rawValue: 66560)
10+
}
11+
public static var serviceApplicationLaunchFailedError: NSCocoaError.Code {
12+
return NSCocoaError.Code(rawValue: 66561)
13+
}
14+
public static var serviceRequestTimedOutError: NSCocoaError.Code {
15+
return NSCocoaError.Code(rawValue: 66562)
16+
}
17+
public static var serviceInvalidPasteboardDataError: NSCocoaError.Code {
18+
return NSCocoaError.Code(rawValue: 66563)
19+
}
20+
public static var serviceMalformedServiceDictionaryError: NSCocoaError.Code {
21+
return NSCocoaError.Code(rawValue: 66564)
22+
}
23+
public static var serviceMiscellaneousError: NSCocoaError.Code {
24+
return NSCocoaError.Code(rawValue: 66800)
25+
}
26+
public static var sharingServiceNotConfiguredError: NSCocoaError.Code {
27+
return NSCocoaError.Code(rawValue: 67072)
28+
}
29+
}
30+
131
extension NSCocoaError {
2-
public static var textReadInapplicableDocumentTypeError: NSCocoaError {
3-
return NSCocoaError(rawValue: 65806)
32+
public static var textReadInapplicableDocumentTypeError: NSCocoaError.Code {
33+
return NSCocoaError.Code(rawValue: 65806)
434
}
5-
public static var textWriteInapplicableDocumentTypeError: NSCocoaError {
6-
return NSCocoaError(rawValue: 66062)
35+
public static var textWriteInapplicableDocumentTypeError: NSCocoaError.Code {
36+
return NSCocoaError.Code(rawValue: 66062)
737
}
8-
public static var serviceApplicationNotFoundError: NSCocoaError {
9-
return NSCocoaError(rawValue: 66560)
38+
public static var serviceApplicationNotFoundError: NSCocoaError.Code {
39+
return NSCocoaError.Code(rawValue: 66560)
1040
}
11-
public static var serviceApplicationLaunchFailedError: NSCocoaError {
12-
return NSCocoaError(rawValue: 66561)
41+
public static var serviceApplicationLaunchFailedError: NSCocoaError.Code {
42+
return NSCocoaError.Code(rawValue: 66561)
1343
}
14-
public static var serviceRequestTimedOutError: NSCocoaError {
15-
return NSCocoaError(rawValue: 66562)
44+
public static var serviceRequestTimedOutError: NSCocoaError.Code {
45+
return NSCocoaError.Code(rawValue: 66562)
1646
}
17-
public static var serviceInvalidPasteboardDataError: NSCocoaError {
18-
return NSCocoaError(rawValue: 66563)
47+
public static var serviceInvalidPasteboardDataError: NSCocoaError.Code {
48+
return NSCocoaError.Code(rawValue: 66563)
1949
}
20-
public static var serviceMalformedServiceDictionaryError: NSCocoaError {
21-
return NSCocoaError(rawValue: 66564)
50+
public static var serviceMalformedServiceDictionaryError: NSCocoaError.Code {
51+
return NSCocoaError.Code(rawValue: 66564)
2252
}
23-
public static var serviceMiscellaneousError: NSCocoaError {
24-
return NSCocoaError(rawValue: 66800)
53+
public static var serviceMiscellaneousError: NSCocoaError.Code {
54+
return NSCocoaError.Code(rawValue: 66800)
2555
}
26-
public static var sharingServiceNotConfiguredError: NSCocoaError {
27-
return NSCocoaError(rawValue: 67072)
56+
public static var sharingServiceNotConfiguredError: NSCocoaError.Code {
57+
return NSCocoaError.Code(rawValue: 67072)
2858
}
59+
}
2960

61+
extension NSCocoaError {
3062
public var isServiceError: Bool {
31-
return rawValue >= 66560 && rawValue <= 66817
63+
return code.rawValue >= 66560 && code.rawValue <= 66817
3264
}
3365

3466
public var isSharingServiceError: Bool {
35-
return rawValue >= 67072 && rawValue <= 67327
67+
return code.rawValue >= 67072 && code.rawValue <= 67327
3668
}
3769

3870
public var isTextReadWriteError: Bool {
39-
return rawValue >= 65792 && rawValue <= 66303
71+
return code.rawValue >= 65792 && code.rawValue <= 66303
4072
}
4173
}
4274

43-
extension NSCocoaError {
75+
extension NSCocoaError.Code {
4476
@swift3_migration(renamed: "textReadInapplicableDocumentTypeError")
45-
public static var TextReadInapplicableDocumentTypeError: NSCocoaError {
46-
return NSCocoaError(rawValue: 65806)
77+
public static var TextReadInapplicableDocumentTypeError: NSCocoaError.Code {
78+
return NSCocoaError.Code(rawValue: 65806)
4779
}
4880
@swift3_migration(renamed: "textWriteInapplicableDocumentTypeError")
49-
public static var TextWriteInapplicableDocumentTypeError: NSCocoaError {
50-
return NSCocoaError(rawValue: 66062)
81+
public static var TextWriteInapplicableDocumentTypeError: NSCocoaError.Code {
82+
return NSCocoaError.Code(rawValue: 66062)
5183
}
5284
@swift3_migration(renamed: "serviceApplicationNotFoundError")
53-
public static var ServiceApplicationNotFoundError: NSCocoaError {
54-
return NSCocoaError(rawValue: 66560)
85+
public static var ServiceApplicationNotFoundError: NSCocoaError.Code {
86+
return NSCocoaError.Code(rawValue: 66560)
5587
}
5688
@swift3_migration(renamed: "serviceApplicationLaunchFailedError")
57-
public static var ServiceApplicationLaunchFailedError: NSCocoaError {
58-
return NSCocoaError(rawValue: 66561)
89+
public static var ServiceApplicationLaunchFailedError: NSCocoaError.Code {
90+
return NSCocoaError.Code(rawValue: 66561)
5991
}
6092
@swift3_migration(renamed: "serviceRequestTimedOutError")
61-
public static var ServiceRequestTimedOutError: NSCocoaError {
62-
return NSCocoaError(rawValue: 66562)
93+
public static var ServiceRequestTimedOutError: NSCocoaError.Code {
94+
return NSCocoaError.Code(rawValue: 66562)
6395
}
6496
@swift3_migration(renamed: "serviceInvalidPasteboardDataError")
65-
public static var ServiceInvalidPasteboardDataError: NSCocoaError {
66-
return NSCocoaError(rawValue: 66563)
97+
public static var ServiceInvalidPasteboardDataError: NSCocoaError.Code {
98+
return NSCocoaError.Code(rawValue: 66563)
6799
}
68100
@swift3_migration(renamed: "serviceMalformedServiceDictionaryError")
69-
public static var ServiceMalformedServiceDictionaryError: NSCocoaError {
70-
return NSCocoaError(rawValue: 66564)
101+
public static var ServiceMalformedServiceDictionaryError: NSCocoaError.Code {
102+
return NSCocoaError.Code(rawValue: 66564)
71103
}
72104
@swift3_migration(renamed: "serviceMiscellaneousError")
73-
public static var ServiceMiscellaneousError: NSCocoaError {
74-
return NSCocoaError(rawValue: 66800)
105+
public static var ServiceMiscellaneousError: NSCocoaError.Code {
106+
return NSCocoaError.Code(rawValue: 66800)
75107
}
76108
@swift3_migration(renamed: "sharingServiceNotConfiguredError")
77-
public static var SharingServiceNotConfiguredError: NSCocoaError {
78-
return NSCocoaError(rawValue: 67072)
109+
public static var SharingServiceNotConfiguredError: NSCocoaError.Code {
110+
return NSCocoaError.Code(rawValue: 67072)
79111
}
80112
}

0 commit comments

Comments
 (0)