TF-2384 Create TwakeCore in ios folder to handle network jmap request to server

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit d8a330b987860f133b7e56b4aa67669c9d3c8f20)
This commit is contained in:
dab246
2023-12-24 19:31:03 +07:00
committed by Dat H. Pham
parent 0cd0c24a56
commit edcc30808c
14 changed files with 375 additions and 4 deletions
@@ -0,0 +1,68 @@
import Foundation
struct JmapRequestObject: Codable {
let using: [String]
let methodCalls: [[RequestInvocation]]
}
enum RequestInvocation: Codable {
case methodRequest(MethodRequest)
case string(String)
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if let x = try? container.decode(String.self) {
self = .string(x)
return
}
if let x = try? container.decode(MethodRequest.self) {
self = .methodRequest(x)
return
}
throw DecodingError.typeMismatch(RequestInvocation.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RequestInvocation"))
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
switch self {
case .methodRequest(let x):
try container.encode(x)
case .string(let x):
try container.encode(x)
}
}
}
struct MethodRequest: Codable {
let accountId: String
let sinceState: String?
let ids: ResultReference?
let properties: [String]?
enum CodingKeys: String, CodingKey {
case accountId
case sinceState
case ids = "#ids"
case properties
}
}
struct ResultReference: Codable {
let resultOf, name, path: String
}
extension JmapRequestObject {
func toData() -> Data? {
if let encodedData = try? JSONEncoder().encode(self) {
return encodedData
}
return nil
}
func toJson() -> String? {
if let data = toData(), let jsonString = String(data: data, encoding: .utf8) {
return jsonString
}
return nil
}
}