Skip to content

Commit 77be1f8

Browse files
authored
Move BaseUri middleware (#515)
1 parent be9f9b9 commit 77be1f8

File tree

5 files changed

+23
-39
lines changed

5 files changed

+23
-39
lines changed

modules/core/src/main/scala/playground/OperationRunner.scala

+1-34
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,9 @@ import cats.data.NonEmptyList
1313
import cats.effect.Async
1414
import cats.effect.MonadCancelThrow
1515
import cats.effect.Resource
16-
import cats.effect.implicits.*
1716
import cats.effect.std
1817
import cats.syntax.all.*
1918
import fs2.compression.Compression
20-
import org.http4s.Uri
2119
import org.http4s.client.Client
2220
import playground.plugins.PlaygroundPlugin
2321
import playground.plugins.SimpleHttpBuilder
@@ -117,39 +115,15 @@ object OperationRunner {
117115

118116
}
119117

120-
// https://github.com/kubukoz/smithy-playground/issues/158
121-
def dynamicBaseUri[F[_]: MonadCancelThrow](
122-
getUri: F[Uri]
123-
): Client[F] => Client[F] =
124-
client =>
125-
Client[F] { req =>
126-
getUri.toResource.flatMap { uri =>
127-
client.run(
128-
req.withUri(
129-
req
130-
.uri
131-
.copy(
132-
scheme = uri.scheme,
133-
authority = uri.authority,
134-
// prefixing with uri.path
135-
path = uri.path.addSegments(req.uri.path.segments),
136-
)
137-
)
138-
)
139-
}
140-
}
141-
142118
def forSchemaIndex[F[_]: StdlibRuntime: Async: Compression: std.Console](
143119
dsi: DynamicSchemaIndex,
144120
client: Client[F],
145-
baseUri: F[Uri],
146121
awsEnv: Resource[F, AwsEnvironment[F]],
147122
plugins: List[PlaygroundPlugin],
148123
): Map[QualifiedIdentifier, Resolver[F]] = forServices(
149124
services = dsi.allServices.toList,
150125
getSchema = dsi.getSchema,
151126
client = client,
152-
baseUri = baseUri,
153127
awsEnv = awsEnv,
154128
plugins = plugins,
155129
)
@@ -158,7 +132,6 @@ object OperationRunner {
158132
services: List[DynamicSchemaIndex.ServiceWrapper],
159133
getSchema: ShapeId => Option[Schema[?]],
160134
client: Client[F],
161-
baseUri: F[Uri],
162135
awsEnv: Resource[F, AwsEnvironment[F]],
163136
plugins: List[PlaygroundPlugin],
164137
): Map[QualifiedIdentifier, Resolver[F]] =
@@ -167,7 +140,6 @@ object OperationRunner {
167140
OperationRunner.forService[svc.Alg, F](
168141
svc.service,
169142
client,
170-
baseUri,
171143
awsEnv,
172144
getSchema,
173145
plugins,
@@ -201,7 +173,6 @@ object OperationRunner {
201173
def forService[Alg[_[_, _, _, _, _]], F[_]: StdlibRuntime: Async: Compression: std.Console](
202174
service: Service[Alg],
203175
client: Client[F],
204-
baseUri: F[Uri],
205176
awsEnv: Resource[F, AwsEnvironment[F]],
206177
schemaIndex: ShapeId => Option[Schema[?]],
207178
plugins: List[PlaygroundPlugin],
@@ -224,11 +195,7 @@ object OperationRunner {
224195
builder
225196
.client(
226197
service,
227-
dynamicBaseUri[F](
228-
baseUri.flatTap { uri =>
229-
std.Console[F].println(s"Using base URI: $uri")
230-
}
231-
).apply(client),
198+
client,
232199
)
233200
.leftMap(e => Issue.InvalidProtocol(e.protocolTag.id, serviceProtocols))
234201
.map(service.toPolyFunction(_))

modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala

-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ object DiagnosticProviderTests extends SimpleIOSuite {
8585
services = services,
8686
getSchema = _ => None,
8787
client = client,
88-
baseUri = IO.stub,
8988
awsEnv = Resource.eval(IO.stub: IO[AwsEnvironment[IO]]),
9089
plugins = Nil,
9190
),

modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import cats.effect.kernel.Async
66
import cats.syntax.all.*
77
import cats.tagless.Derive
88
import cats.tagless.FunctorK
9-
import cats.tagless.catsTaglessApplyKForIdK
109
import cats.tagless.implicits.*
1110
import cats.~>
1211
import com.google.gson.JsonElement

modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import cats.parse.LocationMap
99
import cats.syntax.all.*
1010
import cats.tagless.Derive
1111
import cats.tagless.FunctorK
12-
import cats.tagless.catsTaglessApplyKForIdK
1312
import cats.tagless.implicits.*
1413
import cats.~>
1514
import com.google.gson.JsonElement

modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala

+22-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package playground.lsp
22

33
import cats.effect.implicits.*
44
import cats.effect.kernel.Async
5+
import cats.effect.kernel.MonadCancelThrow
56
import cats.effect.kernel.Resource
67
import cats.effect.std
78
import cats.syntax.all.*
@@ -45,6 +46,7 @@ object ServerBuilder {
4546
val makeClient = EmberClientBuilder
4647
.default[F]
4748
.build
49+
.map(middleware.BaseUri[F])
4850
.map(middleware.AuthorizationHeader[F])
4951
.map(
5052
Logger[F](
@@ -79,7 +81,6 @@ object ServerBuilder {
7981
.forSchemaIndex[F](
8082
dsi = dsi,
8183
client = client,
82-
baseUri = LanguageClient[F].configuration(ConfigurationValue.baseUri),
8384
awsEnv = awsEnv,
8485
plugins = plugins,
8586
)
@@ -98,7 +99,26 @@ object ServerBuilder {
9899

99100
private object middleware {
100101

101-
def AuthorizationHeader[F[_]: Async: LanguageClient]: Client[F] => Client[F] =
102+
def BaseUri[F[_]: LanguageClient: MonadCancelThrow]: Client[F] => Client[F] =
103+
client =>
104+
Client[F] { req =>
105+
LanguageClient[F].configuration(ConfigurationValue.baseUri).toResource.flatMap { uri =>
106+
client.run(
107+
req.withUri(
108+
req
109+
.uri
110+
.copy(
111+
scheme = uri.scheme,
112+
authority = uri.authority,
113+
// prefixing with uri.path
114+
path = uri.path.addSegments(req.uri.path.segments),
115+
)
116+
)
117+
)
118+
}
119+
}
120+
121+
def AuthorizationHeader[F[_]: LanguageClient: MonadCancelThrow]: Client[F] => Client[F] =
102122
client =>
103123
Client[F] { request =>
104124
val updatedRequest =

0 commit comments

Comments
 (0)