@@ -17,7 +17,8 @@ class OtoClient {
17
17
}
18
18
<%= for (method) in service.Methods { %>
19
19
<%= format_comment_text(method.Comment) %> func <%= camelize_down(method.Name) %>(withRequest <%= camelize_down(method.InputObject.TypeName) %>: <%= method.InputObject.TypeName %>, completion: @escaping (_ response: <%= method.OutputObject.TypeName %>?, _ error: Error?) -> ()) {
20
- var request = URLRequest(url: URL(string: "\(self.client.endpoint)/<%= service.Name %>.<%= method.Name %>")!)
20
+ let url = "\(self.client.endpoint)/<%= service.Name %>.<%= method.Name %>"
21
+ var request = URLRequest(url: URL(string: url)!)
21
22
request.httpMethod = "POST"
22
23
request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
23
24
request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Accept")
@@ -35,13 +36,27 @@ class OtoClient {
35
36
completion(nil, err)
36
37
return
37
38
}
39
+ if let httpResponse = response as? HTTPURLResponse {
40
+ if (httpResponse.statusCode != 200) {
41
+ let err = OtoError("\(url): \(httpResponse.statusCode) status code")
42
+ completion(nil, err)
43
+ return
44
+ }
45
+ }
38
46
var <%= camelize_down(method.OutputObject.TypeName) %>: <%= method.OutputObject.TypeName %>
39
47
do {
40
48
<%= camelize_down(method.OutputObject.TypeName) %> = try JSONDecoder().decode(<%= method.OutputObject.TypeName %>.self, from: data!)
41
49
} catch let err {
42
50
completion(nil, err)
43
51
return
44
52
}
53
+ if let serviceErr = <%= camelize_down(method.OutputObject.TypeName) %>.error {
54
+ if (serviceErr != "") {
55
+ let err = OtoError(serviceErr)
56
+ completion(nil, err)
57
+ return
58
+ }
59
+ }
45
60
completion(<%= camelize_down(method.OutputObject.TypeName) %>, nil)
46
61
}
47
62
task.resume()
@@ -57,3 +72,17 @@ class OtoClient {
57
72
<% } %>
58
73
}
59
74
<% } %>
75
+
76
+ struct OtoError: LocalizedError
77
+ {
78
+ var errorDescription: String? { return message }
79
+ var failureReason: String? { return message }
80
+ var recoverySuggestion: String? { return "" }
81
+ var helpAnchor: String? { return "" }
82
+
83
+ private var message : String
84
+
85
+ init(_ description: String) {
86
+ message = description
87
+ }
88
+ }
0 commit comments