Skip to content

Commit

Permalink
Use JSON (de)serializers instead of custom ones for tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gjcairo committed Jan 17, 2025
1 parent b143369 commit 17d01a5
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 18 deletions.
20 changes: 2 additions & 18 deletions Tests/GRPCInProcessTransportTests/InProcessTransportTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ struct InProcessTransportTests {
request: ClientRequest(message: ()),
descriptor: .peerInfo,
serializer: VoidSerializer(),
deserializer: PeerInfoDeserializer(),
deserializer: JSONDeserializer<PeerInfo>(),
options: .defaults
) {
try $0.message
Expand Down Expand Up @@ -142,7 +142,7 @@ private struct TestService: RegistrableRPCService {
router.registerHandler(
forMethod: .peerInfo,
deserializer: VoidDeserializer(),
serializer: PeerInfoSerializer(),
serializer: JSONSerializer<PeerInfo>(),
handler: {
let response = try await self.peerInfo(
request: ServerRequest<Void>(stream: $0),
Expand Down Expand Up @@ -171,22 +171,6 @@ private struct PeerInfo: Codable {
var remote: String
}

private struct PeerInfoSerializer: MessageSerializer {
func serialize<Bytes: GRPCContiguousBytes>(_ message: PeerInfo) throws -> Bytes {
Bytes("\(message.local) \(message.remote)".utf8)
}
}

private struct PeerInfoDeserializer: MessageDeserializer {
func deserialize<Bytes: GRPCContiguousBytes>(_ serializedMessageBytes: Bytes) throws -> PeerInfo {
let stringPeerInfo = serializedMessageBytes.withUnsafeBytes {
String(decoding: $0, as: UTF8.self)
}
let peerInfoComponents = stringPeerInfo.split(separator: " ")
return PeerInfo(local: String(peerInfoComponents[0]), remote: String(peerInfoComponents[1]))
}
}

private struct UTF8Serializer: MessageSerializer {
func serialize<Bytes: GRPCContiguousBytes>(_ message: String) throws -> Bytes {
Bytes(message.utf8)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* Copyright 2025, gRPC Authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import Foundation
import GRPCCore

struct JSONSerializer<Message: Encodable>: MessageSerializer {
private let encoder = JSONEncoder()

func serialize(_ message: Message) throws -> [UInt8] {
let data = try self.encoder.encode(message)
return Array(data)
}
}

struct JSONDeserializer<Message: Decodable>: MessageDeserializer {
private let decoder = JSONDecoder()

func deserialize(_ serializedMessageBytes: [UInt8]) throws -> Message {
try self.decoder.decode(Message.self, from: Data(serializedMessageBytes))
}
}

0 comments on commit 17d01a5

Please sign in to comment.