Skip to content

Commit d187f32

Browse files
committed
Refactor ProtoSerDeser to use type class pattern for serialization and deserialization
1 parent 8b54c90 commit d187f32

File tree

3 files changed

+20
-16
lines changed

3 files changed

+20
-16
lines changed

conformance/src/main/scala/org/ivovk/connect_rpc_scala/conformance/Http4sServerLauncher.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ object Http4sServerLauncher extends IOApp.Simple {
3333

3434
override def run: IO[Unit] = {
3535
val res = for
36-
req <- ProtoSerDeser.read[IO, ServerCompatRequest](System.in).toResource
36+
req <- ProtoSerDeser[IO].read[ServerCompatRequest](System.in).toResource
3737

3838
service <- ConformanceServiceFs2GrpcTrailers.bindServiceResource(
3939
ConformanceServiceImpl[IO]()
@@ -65,7 +65,7 @@ object Http4sServerLauncher extends IOApp.Simple {
6565
addr = server.address
6666
resp = ServerCompatResponse(addr.getHostString, addr.getPort)
6767

68-
_ <- ProtoSerDeser.write[IO](System.out, resp).toResource
68+
_ <- ProtoSerDeser[IO].write(System.out, resp).toResource
6969

7070
_ = System.err.println(s"Server started on $addr...")
7171
yield ()

conformance/src/main/scala/org/ivovk/connect_rpc_scala/conformance/NettyServerLauncher.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ object NettyServerLauncher extends IOApp.Simple {
3030

3131
override def run: IO[Unit] = {
3232
val res = for
33-
req <- ProtoSerDeser.read[IO, ServerCompatRequest](System.in).toResource
33+
req <- ProtoSerDeser[IO].read[ServerCompatRequest](System.in).toResource
3434

3535
service <- ConformanceServiceFs2GrpcTrailers.bindServiceResource(
3636
ConformanceServiceImpl[IO]()
@@ -49,7 +49,7 @@ object NettyServerLauncher extends IOApp.Simple {
4949

5050
resp = ServerCompatResponse(server.host, server.port)
5151

52-
_ <- ProtoSerDeser.write[IO](System.out, resp).toResource
52+
_ <- ProtoSerDeser[IO].write(System.out, resp).toResource
5353

5454
_ = System.err.println(s"Server started on ${server.host}:${server.port}...")
5555
_ = logger.info(s"Netty-server started on ${server.host}:${server.port}...")

conformance/src/main/scala/org/ivovk/connect_rpc_scala/conformance/util/ProtoSerDeser.scala

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,21 @@ import scalapb.{GeneratedMessage as Message, GeneratedMessageCompanion as Compan
66
import java.io.{InputStream, OutputStream}
77

88
object ProtoSerDeser {
9-
def read[F[_]: Sync, T <: Message](in: InputStream)(using comp: Companion[T]): F[T] =
10-
Sync[F].delay {
11-
val size = IntSerDeser.read(in)
12-
comp.parseFrom(in.readNBytes(size))
13-
}
9+
def apply[F[_]: Sync]: ProtoSerDeser[F] = new ProtoSerDeser[F]() {}
1410

15-
def write[F[_]: Sync](out: OutputStream, msg: Message): F[Unit] =
16-
Sync[F].delay {
17-
IntSerDeser.write(out, msg.serializedSize)
18-
out.flush()
19-
out.write(msg.toByteArray)
20-
out.flush()
21-
}
11+
trait ProtoSerDeser[F[_]: Sync] {
12+
def read[T <: Message](in: InputStream)(using comp: Companion[T]): F[T] =
13+
Sync[F].delay {
14+
val size = IntSerDeser.read(in)
15+
comp.parseFrom(in.readNBytes(size))
16+
}
17+
18+
def write(out: OutputStream, msg: Message): F[Unit] =
19+
Sync[F].delay {
20+
IntSerDeser.write(out, msg.serializedSize)
21+
out.flush()
22+
out.write(msg.toByteArray)
23+
out.flush()
24+
}
25+
}
2226
}

0 commit comments

Comments
 (0)