Skip to content

Commit 9ae7083

Browse files
committed
Allow only to prepend path, make it more specific
1 parent acc33dd commit 9ae7083

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

interop/tapir/src/main/scala/caliban/interop/tapir/HttpInterpreter.scala

+17-5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import sttp.tapir.Codec.JsonCodec
88
import sttp.tapir.model.ServerRequest
99
import sttp.tapir._
1010
import zio._
11+
import sttp.tapir.EndpointInput.FixedPath
1112

1213
sealed trait HttpInterpreter[-R, E] { self =>
1314
protected def endpoints[S](streams: Streams[S]): List[
@@ -34,8 +35,8 @@ sealed trait HttpInterpreter[-R, E] { self =>
3435
def intercept[R1](interceptor: Interceptor[R1, R]): HttpInterpreter[R1, E] =
3536
HttpInterpreter.Intercepted(self, interceptor)
3637

37-
def prependInput[BS, S](prependedInput: EndpointInput[Unit]): HttpInterpreter[R, E] =
38-
HttpInterpreter.Prepended(self, prependedInput)
38+
def prependPath[BS, S](path: List[String]): HttpInterpreter[R, E] =
39+
HttpInterpreter.Prepended(self, path)
3940

4041
def configure[R1](configurator: Configurator[R1]): HttpInterpreter[R & R1, E] =
4142
intercept[R & R1](ZLayer.scopedEnvironment[R & R1 & ServerRequest](configurator *> ZIO.environment[R]))
@@ -68,12 +69,23 @@ object HttpInterpreter {
6869

6970
private case class Prepended[R, E](
7071
interpreter: HttpInterpreter[R, E],
71-
prependedInput: EndpointInput[Unit]
72+
path: List[String]
7273
) extends HttpInterpreter[R, E] {
7374
override def endpoints[S](
7475
streams: Streams[S]
75-
): List[PublicEndpoint[(GraphQLRequest, ServerRequest), TapirResponse, CalibanResponse[streams.BinaryStream], S]] =
76-
interpreter.endpoints(streams).map(_.prependIn(prependedInput))
76+
): List[
77+
PublicEndpoint[(GraphQLRequest, ServerRequest), TapirResponse, CalibanResponse[streams.BinaryStream], S]
78+
] = {
79+
val endpoints = interpreter.endpoints(streams)
80+
if (path.nonEmpty) {
81+
val p: List[EndpointInput[Unit]] = path.map(stringToPath)
82+
val fixedPath: EndpointInput[Unit] = p.tail.foldLeft(p.head)(_ / _)
83+
84+
endpoints.map(_.prependIn(fixedPath))
85+
} else {
86+
endpoints
87+
}
88+
}
7789

7890
def executeRequest[BS](
7991
graphQLRequest: GraphQLRequest,

interop/tapir/src/main/scala/caliban/interop/tapir/HttpUploadInterpreter.scala

+14-5
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ sealed trait HttpUploadInterpreter[-R, E] { self =>
8484
def intercept[R1](interceptor: Interceptor[R1, R]): HttpUploadInterpreter[R1, E] =
8585
HttpUploadInterpreter.Intercepted(self, interceptor)
8686

87-
def prependInput[BS, S](prependedInput: EndpointInput[Unit]): HttpUploadInterpreter[R, E] =
88-
HttpUploadInterpreter.Prepended(self, prependedInput)
87+
def prependPath[BS, S](path: List[String]): HttpUploadInterpreter[R, E] =
88+
HttpUploadInterpreter.Prepended(self, path)
8989

9090
def configure[R1](configurator: Configurator[R1]): HttpUploadInterpreter[R & R1, E] =
9191
intercept[R & R1](ZLayer.scopedEnvironment[R & R1 & ServerRequest](configurator *> ZIO.environment[R]))
@@ -128,12 +128,21 @@ object HttpUploadInterpreter {
128128

129129
private case class Prepended[R, E](
130130
interpreter: HttpUploadInterpreter[R, E],
131-
prependedInput: EndpointInput[Unit]
131+
path: List[String]
132132
) extends HttpUploadInterpreter[R, E] {
133133
override def endpoint[S](
134134
streams: Streams[S]
135-
): PublicEndpoint[UploadRequest, TapirResponse, CalibanResponse[streams.BinaryStream], S] =
136-
interpreter.endpoint(streams).prependIn(prependedInput)
135+
): PublicEndpoint[UploadRequest, TapirResponse, CalibanResponse[streams.BinaryStream], S] = {
136+
val endpoints = interpreter.endpoint(streams)
137+
if (path.nonEmpty) {
138+
val p: List[EndpointInput[Unit]] = path.map(stringToPath)
139+
val fixedPath: EndpointInput[Unit] = p.tail.foldLeft(p.head)(_ / _)
140+
141+
endpoints.prependIn(fixedPath)
142+
} else {
143+
endpoints
144+
}
145+
}
137146

138147
def executeRequest[BS](
139148
graphQLRequest: GraphQLRequest,

0 commit comments

Comments
 (0)