Skip to content

Commit 713fc04

Browse files
feat(pluto): hide pluto codable implementation for messages and did
1 parent 907eba5 commit 713fc04

10 files changed

+128
-35
lines changed

Core/Sources/Helpers/JSONDecoder+Helper.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Foundation
33
public extension JSONDecoder {
44
static func didComm() -> JSONDecoder {
55
let decoder = JSONDecoder()
6-
decoder.dataDecodingStrategy = .deferredToData
6+
decoder.dataDecodingStrategy = .base64
77
decoder.keyDecodingStrategy = .convertFromSnakeCase
88
return decoder
99
}

Core/Sources/Helpers/JSONEncoder+Helper.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import Foundation
33
public extension JSONEncoder {
44
static func didComm() -> JSONEncoder {
55
let encoder = JSONEncoder()
6-
encoder.dataEncodingStrategy = .deferredToData
6+
encoder.dataEncodingStrategy = .base64
77
encoder.keyEncodingStrategy = .convertToSnakeCase
8-
encoder.outputFormatting = .prettyPrinted
8+
encoder.outputFormatting = .withoutEscapingSlashes
99
return encoder
1010
}
1111
}
Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,36 @@
11
import Domain
22
import Foundation
33

4-
extension DID: Codable {
4+
struct CodableDID: Codable {
55
enum CodingKeys: String, CodingKey {
66
case schema
77
case method
88
case methodId
99
}
1010

11-
public func encode(to encoder: Encoder) throws {
11+
let did: DID
12+
13+
init(did: DID) {
14+
self.did = did
15+
}
16+
17+
func encode(to encoder: Encoder) throws {
1218
var container = encoder.container(keyedBy: CodingKeys.self)
13-
try container.encode(schema, forKey: .schema)
14-
try container.encode(method, forKey: .method)
15-
try container.encode(methodId, forKey: .methodId)
19+
try container.encode(did.schema, forKey: .schema)
20+
try container.encode(did.method, forKey: .method)
21+
try container.encode(did.methodId, forKey: .methodId)
1622
}
1723

18-
public init(from decoder: Decoder) throws {
24+
init(from decoder: Decoder) throws {
1925
let container = try decoder.container(keyedBy: CodingKeys.self)
2026
let schema = try container.decode(String.self, forKey: .schema)
2127
let method = try container.decode(DIDMethod.self, forKey: .method)
2228
let methodId = try container.decode(DIDMethodId.self, forKey: .methodId)
2329

24-
self.init(schema: schema, method: method, methodId: methodId)
30+
self.init(did: .init(
31+
schema: schema,
32+
method: method,
33+
methodId: methodId
34+
))
2535
}
2636
}
Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Domain
22
import Foundation
33

4-
extension Message: Codable {
4+
struct CodableMessage: Codable {
55
enum CodingKeys: String, CodingKey {
66
case id
77
case piuri
@@ -18,24 +18,30 @@ extension Message: Codable {
1818
case body
1919
}
2020

21-
public func encode(to encoder: Encoder) throws {
21+
let message: Message
22+
23+
func encode(to encoder: Encoder) throws {
2224
var container = encoder.container(keyedBy: CodingKeys.self)
23-
try container.encode(id, forKey: .id)
24-
try container.encode(piuri, forKey: .piuri)
25-
try container.encode(body, forKey: .body)
26-
try container.encode(extraHeaders, forKey: .extraHeaders)
27-
try container.encode(createdTime, forKey: .createdTime)
28-
try container.encode(expiresTimePlus, forKey: .expiresTimePlus)
29-
try container.encode(attachments, forKey: .attachments)
30-
try container.encode(ack, forKey: .ack)
31-
try from.map { try container.encode($0, forKey: .from) }
32-
try to.map { try container.encode($0, forKey: .to) }
33-
try fromPrior.map { try container.encode($0, forKey: .fromPrior) }
34-
try thid.map { try container.encode($0, forKey: .thid) }
35-
try pthid.map { try container.encode($0, forKey: .pthid) }
25+
try container.encode(message.id, forKey: .id)
26+
try container.encode(message.piuri, forKey: .piuri)
27+
try container.encode(message.body, forKey: .body)
28+
try container.encode(message.extraHeaders, forKey: .extraHeaders)
29+
try container.encode(message.createdTime, forKey: .createdTime)
30+
try container.encode(message.expiresTimePlus, forKey: .expiresTimePlus)
31+
try container.encode(message.attachments, forKey: .attachments)
32+
try container.encode(message.ack, forKey: .ack)
33+
try message.from.map { try container.encode(CodableDID(did: $0), forKey: .from) }
34+
try message.to.map { try container.encode(CodableDID(did: $0), forKey: .to) }
35+
try message.fromPrior.map { try container.encode($0, forKey: .fromPrior) }
36+
try message.thid.map { try container.encode($0, forKey: .thid) }
37+
try message.pthid.map { try container.encode($0, forKey: .pthid) }
38+
}
39+
40+
init(message: Message) {
41+
self.message = message
3642
}
3743

38-
public init(from decoder: Decoder) throws {
44+
init(from decoder: Decoder) throws {
3945
let container = try decoder.container(keyedBy: CodingKeys.self)
4046
let id = try container.decode(String.self, forKey: .id)
4147
let piuri = try container.decode(String.self, forKey: .piuri)
@@ -45,13 +51,13 @@ extension Message: Codable {
4551
let expiresTimePlus = try container.decode(Date.self, forKey: .expiresTimePlus)
4652
let attachments = try container.decode([AttachmentDescriptor].self, forKey: .attachments)
4753
let ack = try container.decode([String].self, forKey: .ack)
48-
let from = try? container.decode(DID.self, forKey: .from)
49-
let to = try? container.decode(DID.self, forKey: .to)
54+
let from = try? container.decode(CodableDID.self, forKey: .from).did
55+
let to = try? container.decode(CodableDID.self, forKey: .to).did
5056
let fromPrior = try? container.decode(String.self, forKey: .fromPrior)
5157
let thid = try? container.decode(String.self, forKey: .thid)
5258
let pthid = try? container.decode(String.self, forKey: .pthid)
5359

54-
self.init(
60+
self.init(message: .init(
5561
id: id,
5662
piuri: piuri,
5763
from: from,
@@ -65,6 +71,6 @@ extension Message: Codable {
6571
thid: thid,
6672
pthid: pthid,
6773
ack: ack
68-
)
74+
))
6975
}
7076
}

Pluto/Sources/PersistentStorage/DAO/CDMessageDAO+MessageProvider.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,6 @@ extension CDMessageDAO: MessageProvider {
6363

6464
private extension CDMessage {
6565
func toDomain() throws -> Message {
66-
return try JSONDecoder().decode(Message.self, from: dataJson)
66+
return try JSONDecoder().decode(CodableMessage.self, from: dataJson).message
6767
}
6868
}

Pluto/Sources/PersistentStorage/DAO/CDMessageDAO+MessageStore.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private extension CDMessage {
5757
self.from = msg.from?.string
5858
self.to = msg.to?.string
5959
self.type = msg.piuri
60-
self.dataJson = try JSONEncoder().encode(msg)
60+
self.dataJson = try JSONEncoder().encode(CodableMessage(message: msg))
6161
self.createdTime = msg.createdTime
6262
self.pair = pair
6363
}

PrismAgent/Tests/HandshakeRequestTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ final class HandshakeRequestTests: XCTestCase {
1717
XCTAssertEqual(message.from, request.from)
1818
XCTAssertEqual(message.to, request.to)
1919
XCTAssertEqual(message.thid, request.thid)
20-
let decodedBody = try JSONDecoder().decode(HandshakeRequest.Body.self, from: message.body)
20+
let decodedBody = try JSONDecoder.didComm().decode(HandshakeRequest.Body.self, from: message.body)
2121
XCTAssertEqual(decodedBody, request.body)
2222
}
2323

PrismAgent/Tests/Helper/Message+Testing.swift

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,78 @@
11
@testable import Domain
22
import Foundation
3+
4+
import Domain
5+
import Foundation
6+
7+
extension Message: Codable {
8+
enum CodingKeys: String, CodingKey {
9+
case id
10+
case piuri
11+
case from
12+
case to
13+
case fromPrior
14+
case extraHeaders
15+
case createdTime
16+
case expiresTimePlus
17+
case attachments
18+
case thid
19+
case pthid
20+
case ack
21+
case body
22+
}
23+
24+
public func encode(to encoder: Encoder) throws {
25+
var container = encoder.container(keyedBy: CodingKeys.self)
26+
try container.encode(id, forKey: .id)
27+
try container.encode(piuri, forKey: .piuri)
28+
try container.encode(body.base64UrlEncodedString(), forKey: .body)
29+
try container.encode(extraHeaders, forKey: .extraHeaders)
30+
try container.encode(createdTime, forKey: .createdTime)
31+
try container.encode(expiresTimePlus, forKey: .expiresTimePlus)
32+
try container.encode(attachments, forKey: .attachments)
33+
try container.encode(ack, forKey: .ack)
34+
try from.map { try container.encode($0.string, forKey: .from) }
35+
try to.map { try container.encode($0.string, forKey: .to) }
36+
try fromPrior.map { try container.encode($0, forKey: .fromPrior) }
37+
try thid.map { try container.encode($0, forKey: .thid) }
38+
try pthid.map { try container.encode($0, forKey: .pthid) }
39+
}
40+
41+
public init(from decoder: Decoder) throws {
42+
let container = try decoder.container(keyedBy: CodingKeys.self)
43+
let id = try container.decode(String.self, forKey: .id)
44+
let piuri = try container.decode(String.self, forKey: .piuri)
45+
let body = try container.decode(String.self, forKey: .body)
46+
let extraHeaders = try container.decode([String: String].self, forKey: .extraHeaders)
47+
let createdTime = try container.decode(Date.self, forKey: .createdTime)
48+
let expiresTimePlus = try container.decode(Date.self, forKey: .expiresTimePlus)
49+
let attachments = try container.decode([AttachmentDescriptor].self, forKey: .attachments)
50+
let ack = try container.decode([String].self, forKey: .ack)
51+
let from = try? container.decode(String.self, forKey: .from)
52+
let to = try? container.decode(String.self, forKey: .to)
53+
let fromPrior = try? container.decode(String.self, forKey: .fromPrior)
54+
let thid = try? container.decode(String.self, forKey: .thid)
55+
let pthid = try? container.decode(String.self, forKey: .pthid)
56+
57+
self.init(
58+
id: id,
59+
piuri: piuri,
60+
from: try from.map { try DID(string: $0) },
61+
to: try to.map { try DID(string: $0) },
62+
fromPrior: fromPrior,
63+
body: Data(fromBase64URL: body)!,
64+
extraHeaders: extraHeaders,
65+
createdTime: createdTime,
66+
expiresTimePlus: expiresTimePlus,
67+
attachments: attachments,
68+
thid: thid,
69+
pthid: pthid,
70+
ack: ack
71+
)
72+
}
73+
}
74+
75+
376
extension Message: Equatable {
477
public static func == (lhs: Domain.Message, rhs: Domain.Message) -> Bool {
578
lhs.id == rhs.id && lhs.piuri == rhs.piuri

PrismAgent/Tests/ProposeCredentialTests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ final class ProposeCredentialTests: XCTestCase {
88
let toDID = DID(index: 1)
99
let validProposeCredential = ProposeCredential(
1010
body: .init(
11+
goalCode: "Test1",
12+
comment: "Test1",
1113
credentialPreview: .init(
1214
attributes: [
1315
.init(

PrismAgent/Tests/RequestCredentialTests.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,21 @@ final class RequestCredentialTests: XCTestCase {
88
let toDID = DID(index: 1)
99
let validRequestCredential = RequestCredential(
1010
body: .init(
11+
goalCode: "test1",
12+
comment: "test1",
1113
formats: [
1214
.init(
1315
attachId: "test1",
1416
format: "test")
1517
]
1618
),
17-
attachments: [],
19+
attachments: [
20+
],
1821
thid: "1",
1922
from: fromDID,
2023
to: toDID
2124
)
2225
let requestMessage = try validRequestCredential.makeMessage()
23-
2426
let testRequestCredential = try RequestCredential(fromMessage: requestMessage)
2527
XCTAssertEqual(validRequestCredential, testRequestCredential)
2628
}

0 commit comments

Comments
 (0)