@@ -13,14 +13,30 @@ import ArgumentParser
1313import ArgumentParserToolInfo
1414import Foundation
1515
16+ enum GenerateManualError : Error {
17+ case failedToRunSubprocess( error: Error )
18+ case unableToParseToolOutput( error: Error )
19+ case unsupportedDumpHelpVersion( expected: Int , found: Int )
20+ case failedToGenerateManualPages( error: Error )
21+ }
22+
23+ extension GenerateManualError : CustomStringConvertible {
24+ var description : String {
25+ switch self {
26+ case let . failedToRunSubprocess( error) :
27+ " Failed to run subprocess: \( error) "
28+ case let . unableToParseToolOutput( error) :
29+ " Failed to parse tool output: \( error) "
30+ case let . unsupportedDumpHelpVersion( expected, found) :
31+ " Unsupported dump help version, expected ' \( expected) ' but found: ' \( found) ' "
32+ case let . failedToGenerateManualPages( error) :
33+ " Failed to generated manual pages: \( error) "
34+ }
35+ }
36+ }
37+
1638@main
1739struct GenerateManual : ParsableCommand {
18- enum Error : Swift . Error {
19- case failedToRunSubprocess( error: Swift . Error )
20- case unableToParseToolOutput( error: Swift . Error )
21- case unsupportedDumpHelpVersion( expected: Int , found: Int )
22- case failedToGenerateManualPages( error: Swift . Error )
23- }
2440
2541 static let configuration = CommandConfiguration (
2642 commandName: " generate-manual " ,
@@ -70,25 +86,25 @@ struct GenerateManual: ParsableCommand {
7086 let output = try executeCommand ( executable: tool, arguments: [ " --experimental-dump-help " ] )
7187 data = output. data ( using: . utf8) ?? Data ( )
7288 } catch {
73- throw Error . failedToRunSubprocess ( error: error)
89+ throw GenerateManualError . failedToRunSubprocess ( error: error)
7490 }
7591
7692 do {
7793 let toolInfoThin = try JSONDecoder ( ) . decode ( ToolInfoHeader . self, from: data)
7894 guard toolInfoThin. serializationVersion == 0 else {
79- throw Error . unsupportedDumpHelpVersion (
95+ throw GenerateManualError . unsupportedDumpHelpVersion (
8096 expected: 0 ,
8197 found: toolInfoThin. serializationVersion)
8298 }
8399 } catch {
84- throw Error . unableToParseToolOutput ( error: error)
100+ throw GenerateManualError . unableToParseToolOutput ( error: error)
85101 }
86102
87103 let toolInfo : ToolInfoV0
88104 do {
89105 toolInfo = try JSONDecoder ( ) . decode ( ToolInfoV0 . self, from: data)
90106 } catch {
91- throw Error . unableToParseToolOutput ( error: error)
107+ throw GenerateManualError . unableToParseToolOutput ( error: error)
92108 }
93109
94110 do {
@@ -100,7 +116,7 @@ struct GenerateManual: ParsableCommand {
100116 savingTo: URL ( fileURLWithPath: outputDirectory) )
101117 }
102118 } catch {
103- throw Error . failedToGenerateManualPages ( error: error)
119+ throw GenerateManualError . failedToGenerateManualPages ( error: error)
104120 }
105121 }
106122
0 commit comments