File tree Expand file tree Collapse file tree 7 files changed +91
-13
lines changed Expand file tree Collapse file tree 7 files changed +91
-13
lines changed Original file line number Diff line number Diff line change @@ -214,6 +214,26 @@ open class Client {
214
214
) ?? ""
215
215
}
216
216
217
+ ///
218
+ /// Sends a "ping" request to Appwrite to verify connectivity.
219
+ ///
220
+ /// @return String
221
+ /// @throws Exception
222
+ ///
223
+ open func ping() async throws -> String {
224
+ let apiPath: String = "/ping"
225
+
226
+ let apiHeaders: [String: String] = [
227
+ "content-type": "application/json"
228
+ ]
229
+
230
+ return try await call(
231
+ method: "GET",
232
+ path: apiPath,
233
+ headers: apiHeaders
234
+ )
235
+ }
236
+
217
237
///
218
238
/// Make an API call
219
239
///
@@ -284,6 +304,8 @@ open class Client {
284
304
}
285
305
}
286
306
307
+ var data = try await response.body.collect(upTo: Int.max)
308
+
287
309
switch response.status.code {
288
310
case 0..<400:
289
311
if response .headers [" Set-Cookie" ].count > 0 {
@@ -296,10 +318,11 @@ open class Client {
296
318
switch T.self {
297
319
case is Bool.Type:
298
320
return true as! T
321
+ case is String.Type:
322
+ return (data.readString(length: data.readableBytes) ?? "") as! T
299
323
case is ByteBuffer.Type:
300
- return try await response.body.collect(upTo: Int.max) as! T
324
+ return data as! T
301
325
default:
302
- let data = try await response.body.collect(upTo: Int.max)
303
326
if data.readableBytes == 0 {
304
327
return true as! T
305
328
}
@@ -309,7 +332,6 @@ open class Client {
309
332
}
310
333
default:
311
334
var message = ""
312
- var data = try await response.body.collect(upTo: Int.max)
313
335
var type = ""
314
336
315
337
do {
Original file line number Diff line number Diff line change @@ -192,6 +192,26 @@ open class Client {
192
192
) ?? ""
193
193
}
194
194
195
+ ///
196
+ /// Sends a "ping" request to Appwrite to verify connectivity.
197
+ ///
198
+ /// @return String
199
+ /// @throws Exception
200
+ ///
201
+ open func ping() async throws -> String {
202
+ let apiPath: String = "/ping"
203
+
204
+ let apiHeaders: [String: String] = [
205
+ "content-type": "application/json"
206
+ ]
207
+
208
+ return try await call(
209
+ method: "GET",
210
+ path: apiPath,
211
+ headers: apiHeaders
212
+ )
213
+ }
214
+
195
215
///
196
216
/// Make an API call
197
217
///
@@ -327,15 +347,18 @@ open class Client {
327
347
}
328
348
}
329
349
350
+ var data = try await response.body.collect(upTo: Int.max)
351
+
330
352
switch response.status.code {
331
353
case 0..<400:
332
354
switch T .self {
333
355
case is Bool .Type:
334
356
return true as ! T
357
+ case is String .Type:
358
+ return (data .readString (length: data .readableBytes ) ?? " " ) as ! T
335
359
case is ByteBuffer .Type:
336
- return try await response . body . collect ( upTo: Int . max ) as ! T
360
+ return data as ! T
337
361
default:
338
- let data = try await response .body .collect (upTo: Int .max )
339
362
if data .readableBytes == 0 {
340
363
return true as ! T
341
364
}
@@ -345,7 +368,6 @@ open class Client {
345
368
}
346
369
default:
347
370
var message = " "
348
- var data = try await response .body .collect (upTo: Int .max )
349
371
var type = " "
350
372
351
373
do {
Original file line number Diff line number Diff line change @@ -58,5 +58,21 @@ public class {{ definition | modelType(spec) | raw }} {
58
58
{%~ endif %}
59
59
)
60
60
}
61
+
62
+ public static func from(json: String) -> {{ definition .name | caseUcfirst }}? {
63
+ guard let data = json.data(using: .utf8) else {
64
+ return nil
65
+ }
66
+
67
+ do {
68
+ if let jsonObject = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
69
+ return {{ definition .name | caseUcfirst }}.from(map: jsonObject)
70
+ } else {
71
+ return nil
72
+ }
73
+ } catch {
74
+ return nil
75
+ }
76
+ }
61
77
}
62
78
{% endif %}
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ class AppleSwift56Test extends Base
19
19
'docker run --network="mockapi" --rm -v $(pwd):/app -w /app/tests/sdks/apple swift:5.6-focal swift test ' ;
20
20
21
21
protected array $ expectedOutput = [
22
+ ...Base::PING_RESPONSE ,
22
23
...Base::FOO_RESPONSES ,
23
24
...Base::BAR_RESPONSES ,
24
25
...Base::GENERAL_RESPONSES ,
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ class Swift56Test extends Base
19
19
'docker run --network="mockapi" --rm -v $(pwd):/app -w /app/tests/sdks/swift swift:5.6-focal swift test ' ;
20
20
21
21
protected array $ expectedOutput = [
22
+ ...Base::PING_RESPONSE ,
22
23
...Base::FOO_RESPONSES ,
23
24
...Base::BAR_RESPONSES ,
24
25
...Base::GENERAL_RESPONSES ,
Original file line number Diff line number Diff line change @@ -21,11 +21,21 @@ class Tests: XCTestCase {
21
21
22
22
func test( ) async throws {
23
23
let client = Client ( )
24
- . setEndpointRealtime ( " ws://cloud.appwrite.io/v1 " )
25
- . setProject ( " console " )
24
+ . setProject ( " 123456 " )
26
25
. addHeader ( key: " Origin " , value: " http://localhost " )
27
26
. setSelfSigned ( )
28
27
28
+ var mock : Mock
29
+
30
+ // Ping pong test
31
+ let ping = try await client. ping ( )
32
+ mock = Mock . from ( json: ping) !
33
+ print ( mock. result)
34
+
35
+ // reset configs
36
+ client. setProject ( " console " )
37
+ . setEndpointRealtime ( " ws://cloud.appwrite.io/v1 " )
38
+
29
39
let foo = Foo ( client)
30
40
let bar = Bar ( client)
31
41
let general = General ( client)
@@ -39,8 +49,6 @@ class Tests: XCTestCase {
39
49
expectation. fulfill ( )
40
50
}
41
51
42
- var mock : Mock
43
-
44
52
// Foo Tests
45
53
mock = try await foo. get ( x: " string " , y: 123 , z: [ " string in array " ] )
46
54
print ( mock. result)
Original file line number Diff line number Diff line change @@ -21,16 +21,24 @@ class Tests: XCTestCase {
21
21
func test( ) async throws {
22
22
do {
23
23
let client = Client ( )
24
- . setProject ( " console " )
24
+ . setProject ( " 123456 " )
25
25
. addHeader ( key: " Origin " , value: " http://localhost " )
26
26
. setSelfSigned ( )
27
27
28
+ var mock : Mock
29
+
30
+ // Ping pong test
31
+ let ping = try await client. ping ( )
32
+ mock = Mock . from ( json: ping) !
33
+ print ( mock. result)
34
+
35
+ // reset project
36
+ client. setProject ( " console " )
37
+
28
38
let foo = Foo ( client)
29
39
let bar = Bar ( client)
30
40
let general = General ( client)
31
41
32
- var mock : Mock
33
-
34
42
// Foo Tests
35
43
mock = try await foo. get ( x: " string " , y: 123 , z: [ " string in array " ] )
36
44
print ( mock. result)
You can’t perform that action at this time.
0 commit comments