diff --git a/Sources/XXClient/Models/DHKey.swift b/Sources/XXClient/Models/DHKey.swift new file mode 100644 index 0000000000000000000000000000000000000000..5dc94983016cced7c2d4b2c0dc450c63f07acdcc --- /dev/null +++ b/Sources/XXClient/Models/DHKey.swift @@ -0,0 +1,28 @@ +import Foundation + +public struct DHKey: Equatable { + public init(value: String, fingerprint: UInt64) { + self.value = value + self.fingerprint = fingerprint + } + + public var value: String + public var fingerprint: UInt64 +} + +extension DHKey: Codable { + enum CodingKeys: String, CodingKey { + case value = "Value" + case fingerprint = "Fingerprint" + } + + public static func decode(_ data: Data) throws -> Self { + let data = convertJsonNumberToString(in: data, at: "Value") + return try JSONDecoder().decode(Self.self, from: data) + } + + public func encode() throws -> Data { + let data = try JSONEncoder().encode(self) + return convertJsonStringToNumber(in: data, at: "Value") + } +} diff --git a/Tests/XXClientTests/Models/DHKeyTests.swift b/Tests/XXClientTests/Models/DHKeyTests.swift new file mode 100644 index 0000000000000000000000000000000000000000..eea82bf385ff766676d881c5ae930c6a965f5668 --- /dev/null +++ b/Tests/XXClientTests/Models/DHKeyTests.swift @@ -0,0 +1,31 @@ +import CustomDump +import XCTest +@testable import XXClient + +final class DHKeyTests: XCTestCase { + func testCoding() throws { + let value = "1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949" + let fingerprint: UInt64 = 15989433043166758754 + let jsonString = """ + { + "Value": \(value), + "Fingerprint": \(fingerprint) + } + """ + let jsonData = jsonString.data(using: .utf8)! + let model = try DHKey.decode(jsonData) + + XCTAssertNoDifference(model, DHKey( + value: value, + fingerprint: fingerprint + )) + + let encodedModel = try model.encode() + let encodedModelString = String(data: encodedModel, encoding: .utf8) + + XCTAssertNoDifference( + encodedModelString, + #"{"Value":\#(value),"Fingerprint":\#(fingerprint)}"# + ) + } +}