Skip to content

Commit 43d66d0

Browse files
committed
Use builder syntax for configuration
1 parent 50732cc commit 43d66d0

File tree

4 files changed

+52
-27
lines changed

4 files changed

+52
-27
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,17 @@ object Main extends IOApp.Simple {
3939
httpApp <- ConnectRpcHttpRoutes
4040
.create[IO](
4141
Seq(service),
42-
Configuration(
43-
jsonPrinterConfigurer = { p =>
44-
// Registering message types in TypeRegistry is required to pass com.google.protobuf.any.Any
45-
// JSON-serialization conformance tests
42+
Configuration.default
43+
// Registering message types in TypeRegistry is required to pass com.google.protobuf.any.Any
44+
// JSON-serialization conformance tests
45+
.withJsonPrinterConfigurator { p =>
4646
p.withTypeRegistry(
4747
TypeRegistry.default
4848
.addMessage[connectrpc.conformance.v1.UnaryRequest]
4949
.addMessage[connectrpc.conformance.v1.IdempotentUnaryRequest]
5050
.addMessage[connectrpc.conformance.v1.ConformancePayload.RequestInfo]
5151
)
5252
}
53-
)
5453
)
5554
.map(r => r.orNotFound)
5655

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.ivovk.connect_rpc_scala
2+
3+
import cats.Endo
4+
import io.grpc.{ManagedChannelBuilder, ServerBuilder}
5+
import scalapb.json4s.Printer
6+
7+
import scala.concurrent.duration.*
8+
9+
object Configuration {
10+
val default: Configuration = Configuration()
11+
}
12+
13+
case class Configuration private(
14+
jsonPrinterConfigurator: Endo[Printer] = identity,
15+
serverBuilderConfigurator: Endo[ServerBuilder[_]] = identity,
16+
channelBuilderConfigurator: Endo[ManagedChannelBuilder[_]] = identity,
17+
waitForShutdown: Duration = 5.seconds,
18+
) {
19+
20+
def withJsonPrinterConfigurator(jsonPrinterConfigurer: Endo[Printer]): Configuration =
21+
copy(jsonPrinterConfigurator = jsonPrinterConfigurer)
22+
23+
def withServerBuilderConfigurator(serverBuilderConfigurer: Endo[ServerBuilder[_]]): Configuration =
24+
copy(serverBuilderConfigurator = serverBuilderConfigurer)
25+
26+
def withChannelBuilderConfigurator(channelBuilderConfigurer: Endo[ManagedChannelBuilder[_]]): Configuration =
27+
copy(channelBuilderConfigurator = channelBuilderConfigurer)
28+
29+
def withWaitForShutdown(waitForShutdown: Duration): Configuration =
30+
copy(waitForShutdown = waitForShutdown)
31+
32+
}
33+

core/src/main/scala/org/ivovk/connect_rpc_scala/ConnectRpcHttpRoutes.scala

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ package org.ivovk.connect_rpc_scala
22

33
import cats.Endo
44
import cats.data.EitherT
5-
import cats.effect.Async
6-
import cats.effect.kernel.Resource
5+
import cats.effect.{Async, Resource}
76
import cats.implicits.*
87
import fs2.compression.Compression
98
import io.grpc.*
@@ -17,19 +16,13 @@ import org.ivovk.connect_rpc_scala.http.MessageCodec.given
1716
import org.ivovk.connect_rpc_scala.http.QueryParams.*
1817
import org.slf4j.{Logger, LoggerFactory}
1918
import scalapb.grpc.ClientCalls
20-
import scalapb.json4s.{JsonFormat, Printer}
19+
import scalapb.json4s.JsonFormat
2120
import scalapb.{GeneratedMessage, GeneratedMessageCompanion, TextFormat}
2221

2322
import java.util.concurrent.atomic.AtomicReference
24-
import scala.concurrent.duration.*
23+
import scala.concurrent.duration.MILLISECONDS
2524
import scala.util.chaining.*
2625

27-
case class Configuration(
28-
jsonPrinterConfigurer: Endo[Printer] = identity,
29-
serverBuilderConfigurer: Endo[ServerBuilder[_]] = identity,
30-
channelBuilderConfigurer: Endo[ManagedChannelBuilder[_]] = identity,
31-
waitForShutdown: Duration = 10.seconds,
32-
)
3326

3427
object ConnectRpcHttpRoutes {
3528

@@ -39,12 +32,12 @@ object ConnectRpcHttpRoutes {
3932

4033
def create[F[_] : Async](
4134
services: Seq[ServerServiceDefinition],
42-
configuration: Configuration = Configuration()
35+
configuration: Configuration = Configuration.default
4336
): Resource[F, HttpRoutes[F]] = {
4437
val dsl = Http4sDsl[F]
4538
import dsl.*
4639

47-
val jsonPrinter = configuration.jsonPrinterConfigurer(JsonFormat.printer)
40+
val jsonPrinter = configuration.jsonPrinterConfigurator(JsonFormat.printer)
4841

4942
val codecRegistry = MessageCodecRegistry[F](
5043
JsonMessageCodec[F](jsonPrinter),
@@ -56,8 +49,8 @@ object ConnectRpcHttpRoutes {
5649
for
5750
ipChannel <- InProcessChannelBridge.create(
5851
services,
59-
configuration.serverBuilderConfigurer,
60-
configuration.channelBuilderConfigurer,
52+
configuration.serverBuilderConfigurator,
53+
configuration.channelBuilderConfigurator,
6154
configuration.waitForShutdown,
6255
)
6356
yield

core/src/main/scala/org/ivovk/connect_rpc_scala/InProcessChannelBridge.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,28 @@ object InProcessChannelBridge {
1515

1616
def create[F[_] : Sync](
1717
services: Seq[ServerServiceDefinition],
18-
serverBuilderConfigurer: Endo[ServerBuilder[?]] = identity,
19-
channelBuilderConfigurer: Endo[ManagedChannelBuilder[?]] = identity,
18+
serverBuilderConfigurator: Endo[ServerBuilder[?]] = identity,
19+
channelBuilderConfigurator: Endo[ManagedChannelBuilder[?]] = identity,
2020
waitForShutdown: Duration,
2121
): Resource[F, Channel] = {
2222
for
2323
name <- Resource.eval(Sync[F].delay(InProcessServerBuilder.generateName()))
24-
server <- createServer(name, services, waitForShutdown, serverBuilderConfigurer)
25-
channel <- createStub(name, waitForShutdown, channelBuilderConfigurer)
24+
server <- createServer(name, services, waitForShutdown, serverBuilderConfigurator)
25+
channel <- createStub(name, waitForShutdown, channelBuilderConfigurator)
2626
yield channel
2727
}
2828

2929
private def createServer[F[_] : Sync](
3030
name: String,
3131
services: Seq[ServerServiceDefinition],
3232
waitForShutdown: Duration,
33-
serverBuilderConfigurer: Endo[ServerBuilder[?]] = identity,
33+
serverBuilderConfigurator: Endo[ServerBuilder[?]] = identity,
3434
): Resource[F, Server] = {
3535
val acquire = Sync[F].delay {
3636
InProcessServerBuilder.forName(name)
3737
.directExecutor()
3838
.addServices(services.asJava)
39-
.pipe(serverBuilderConfigurer)
39+
.pipe(serverBuilderConfigurator)
4040
.build()
4141
.start()
4242
}
@@ -49,12 +49,12 @@ object InProcessChannelBridge {
4949
private def createStub[F[_] : Sync](
5050
name: String,
5151
waitForShutdown: Duration,
52-
channelBuilderConfigurer: Endo[ManagedChannelBuilder[?]] = identity,
52+
channelBuilderConfigurator: Endo[ManagedChannelBuilder[?]] = identity,
5353
): Resource[F, ManagedChannel] = {
5454
val acquire = Sync[F].delay {
5555
InProcessChannelBuilder.forName(name)
5656
.directExecutor()
57-
.pipe(channelBuilderConfigurer)
57+
.pipe(channelBuilderConfigurator)
5858
.build()
5959
}
6060
val release = (c: ManagedChannel) =>

0 commit comments

Comments
 (0)