@@ -18,31 +18,59 @@ import scala.concurrent.duration.*
18
18
object ConnectRouteBuilder {
19
19
20
20
def forService [F [_] : Async ](service : ServerServiceDefinition ): ConnectRouteBuilder [F ] =
21
- ConnectRouteBuilder (Seq (service))
21
+ forServices (Seq (service))
22
22
23
23
def forServices [F [_] : Async ](service : ServerServiceDefinition , other : ServerServiceDefinition * ): ConnectRouteBuilder [F ] =
24
- ConnectRouteBuilder (service +: other)
24
+ forServices (service +: other)
25
25
26
26
def forServices [F [_] : Async ](services : Seq [ServerServiceDefinition ]): ConnectRouteBuilder [F ] =
27
- ConnectRouteBuilder (services)
27
+ new ConnectRouteBuilder (
28
+ services = services,
29
+ serverConfigurator = identity,
30
+ channelConfigurator = identity,
31
+ customJsonCodec = None ,
32
+ pathPrefix = Uri .Path .Root ,
33
+ executor = ExecutionContext .global,
34
+ waitForShutdown = 5 .seconds,
35
+ treatTrailersAsHeaders = true ,
36
+ )
28
37
29
38
}
30
39
31
- case class ConnectRouteBuilder [F [_] : Async ] private (
40
+ final class ConnectRouteBuilder [F [_] : Async ] private (
32
41
services : Seq [ServerServiceDefinition ],
33
- serverConfigurator : Endo [ServerBuilder [_]] = identity ,
34
- channelConfigurator : Endo [ManagedChannelBuilder [_]] = identity ,
35
- customJsonCodec : Option [JsonMessageCodec [F ]] = None ,
36
- pathPrefix : Uri .Path = Uri . Path . Root ,
37
- executor : Executor = ExecutionContext .global ,
38
- waitForShutdown : Duration = 5 .seconds ,
39
- treatTrailersAsHeaders : Boolean = true ,
42
+ serverConfigurator : Endo [ServerBuilder [_]],
43
+ channelConfigurator : Endo [ManagedChannelBuilder [_]],
44
+ customJsonCodec : Option [JsonMessageCodec [F ]],
45
+ pathPrefix : Uri .Path ,
46
+ executor : Executor ,
47
+ waitForShutdown : Duration ,
48
+ treatTrailersAsHeaders : Boolean ,
40
49
) {
41
50
42
- import Mappings .*
51
+ private def copy (
52
+ services : Seq [ServerServiceDefinition ] = services,
53
+ serverConfigurator : Endo [ServerBuilder [_]] = serverConfigurator,
54
+ channelConfigurator : Endo [ManagedChannelBuilder [_]] = channelConfigurator,
55
+ customJsonCodec : Option [JsonMessageCodec [F ]] = customJsonCodec,
56
+ pathPrefix : Uri .Path = pathPrefix,
57
+ executor : Executor = executor,
58
+ waitForShutdown : Duration = waitForShutdown,
59
+ treatTrailersAsHeaders : Boolean = treatTrailersAsHeaders,
60
+ ): ConnectRouteBuilder [F ] =
61
+ new ConnectRouteBuilder (
62
+ services,
63
+ serverConfigurator,
64
+ channelConfigurator,
65
+ customJsonCodec,
66
+ pathPrefix,
67
+ executor,
68
+ waitForShutdown,
69
+ treatTrailersAsHeaders,
70
+ )
43
71
44
- def withJsonCodec ( codec : JsonMessageCodec [ F ]): ConnectRouteBuilder [F ] =
45
- copy(customJsonCodec = Some (codec ))
72
+ def withJsonCodecConfigurator ( method : Endo [ JsonMessageCodecBuilder [ F ] ]): ConnectRouteBuilder [F ] =
73
+ copy(customJsonCodec = Some (method( JsonMessageCodecBuilder [ F ]()).build ))
46
74
47
75
def withServerConfigurator (method : Endo [ServerBuilder [_]]): ConnectRouteBuilder [F ] =
48
76
copy(serverConfigurator = method)
@@ -60,19 +88,20 @@ case class ConnectRouteBuilder[F[_] : Async] private(
60
88
copy(waitForShutdown = duration)
61
89
62
90
/**
63
- * If enabled, trailers will be treated as headers (no "trailer-" prefix).
91
+ * When enabled, response trailers are treated as headers (no "trailer-" prefix added ).
64
92
*
65
93
* Both `fs2-grpc` and `zio-grpc` support trailing headers only, so enabling this option is a single way to
66
- * send headers from the server to the client.
94
+ * send headers from the server to a client.
67
95
*
68
96
* Enabled by default.
69
97
*/
70
98
def withTreatTrailersAsHeaders (enabled : Boolean ): ConnectRouteBuilder [F ] =
71
99
copy(treatTrailersAsHeaders = enabled)
72
100
73
101
/**
74
- * Method can be used if you want to add additional routes to the server.
75
- * Otherwise, it is preferred to use the [[build ]] method.
102
+ * Use this method only if you want to add additional routes to the server.
103
+ *
104
+ * Otherwise, [[build ]] method should be preferred.
76
105
*/
77
106
def buildRoutes : Resource [F , HttpRoutes [F ]] = {
78
107
val httpDsl = Http4sDsl [F ]
0 commit comments