@@ -18,38 +18,66 @@ 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 .*
43
-
44
- def withJsonCodec (codec : JsonMessageCodec [F ]): ConnectRouteBuilder [F ] =
45
- copy(customJsonCodec = Some (codec))
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
+ )
46
71
47
72
def withServerConfigurator (method : Endo [ServerBuilder [_]]): ConnectRouteBuilder [F ] =
48
73
copy(serverConfigurator = method)
49
74
50
75
def withChannelConfigurator (method : Endo [ManagedChannelBuilder [_]]): ConnectRouteBuilder [F ] =
51
76
copy(channelConfigurator = method)
52
77
78
+ def withJsonCodecConfigurator (method : Endo [JsonMessageCodecBuilder [F ]]): ConnectRouteBuilder [F ] =
79
+ copy(customJsonCodec = Some (method(JsonMessageCodecBuilder [F ]()).build))
80
+
53
81
def withPathPrefix (path : Uri .Path ): ConnectRouteBuilder [F ] =
54
82
copy(pathPrefix = path)
55
83
@@ -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