@@ -5,7 +5,7 @@ import cats.effect.{Async, Resource}
5
5
import cats .implicits .*
6
6
import io .grpc .{ManagedChannelBuilder , ServerBuilder , ServerServiceDefinition }
7
7
import org .http4s .dsl .Http4sDsl
8
- import org .http4s .{HttpApp , HttpRoutes , Method }
8
+ import org .http4s .{HttpApp , HttpRoutes , Method , Uri }
9
9
import org .ivovk .connect_rpc_scala .grpc .*
10
10
import org .ivovk .connect_rpc_scala .http .*
11
11
import org .ivovk .connect_rpc_scala .http .QueryParams .*
@@ -35,6 +35,7 @@ case class ConnectRouteBuilder[F[_] : Async] private(
35
35
jsonPrinterConfigurator : Endo [Printer ] = identity,
36
36
serverConfigurator : Endo [ServerBuilder [_]] = identity,
37
37
channelConfigurator : Endo [ManagedChannelBuilder [_]] = identity,
38
+ pathPrefix : Uri .Path = Uri .Path .Root ,
38
39
executor : Executor = ExecutionContext .global,
39
40
waitForShutdown : Duration = 5 .seconds,
40
41
treatTrailersAsHeaders : Boolean = true ,
@@ -51,6 +52,9 @@ case class ConnectRouteBuilder[F[_] : Async] private(
51
52
def withChannelConfigurator (method : Endo [ManagedChannelBuilder [_]]): ConnectRouteBuilder [F ] =
52
53
copy(channelConfigurator = method)
53
54
55
+ def withPathPrefix (path : Uri .Path ): ConnectRouteBuilder [F ] =
56
+ copy(pathPrefix = path)
57
+
54
58
def withExecutor (executor : Executor ): ConnectRouteBuilder [F ] =
55
59
copy(executor = executor)
56
60
@@ -106,12 +110,12 @@ case class ConnectRouteBuilder[F[_] : Async] private(
106
110
)
107
111
108
112
HttpRoutes .of[F ] {
109
- case req@ Method .GET -> Root / serviceName / methodName :? EncodingQP (contentType) +& MessageQP (message) =>
113
+ case req@ Method .GET -> pathPrefix / serviceName / methodName :? EncodingQP (contentType) +& MessageQP (message) =>
110
114
val grpcMethod = MethodName (serviceName, methodName)
111
115
val entity = RequestEntity [F ](message, req.headers)
112
116
113
117
handler.handle(Method .GET , contentType.some, entity, grpcMethod)
114
- case req@ Method .POST -> Root / serviceName / methodName =>
118
+ case req@ Method .POST -> pathPrefix / serviceName / methodName =>
115
119
val grpcMethod = MethodName (serviceName, methodName)
116
120
val contentType = req.contentType.map(_.mediaType)
117
121
val entity = RequestEntity [F ](req)
0 commit comments