Skip to content

Commit 2abe18a

Browse files
committed
Release 1.11.12
1 parent 82d17d9 commit 2abe18a

38 files changed

+184
-142
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ val booksListingRequest: Request[DecodeResult[Either[String, List[Book]]], Any]
139139
Add the following dependency:
140140

141141
```sbt
142-
"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.11.11"
142+
"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.11.12"
143143
```
144144

145145
Then, import:

generated-doc/out/client/http4s.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Add the dependency:
44

55
```scala
6-
"com.softwaremill.sttp.tapir" %% "tapir-http4s-client" % "1.11.11"
6+
"com.softwaremill.sttp.tapir" %% "tapir-http4s-client" % "1.11.12"
77
```
88

99
To interpret an endpoint definition as an `org.http4s.Request[F]`, import:

generated-doc/out/client/play.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ See the [Play framework documentation](https://www.playframework.com/documentati
66
For **Play 3.0**, add the dependency:
77

88
```scala
9-
"com.softwaremill.sttp.tapir" %% "tapir-play-client" % "1.11.11"
9+
"com.softwaremill.sttp.tapir" %% "tapir-play-client" % "1.11.12"
1010
```
1111

1212
For **Play 2.9**, add
1313

1414
```scala
15-
"com.softwaremill.sttp.tapir" %% "tapir-play29-client" % "1.11.11"
15+
"com.softwaremill.sttp.tapir" %% "tapir-play29-client" % "1.11.12"
1616
```
1717

1818
instead. Furthermore, replace all uses of `sttp.capabilities.pekko.PekkoStreams` in the following code snippets with `sttp.capabilities.akka.AkkaStreams`.

generated-doc/out/client/sttp.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Add the dependency:
44

55
```scala
6-
"com.softwaremill.sttp.tapir" %% "tapir-sttp-client" % "1.11.11"
6+
"com.softwaremill.sttp.tapir" %% "tapir-sttp-client" % "1.11.12"
77
```
88

99
To make requests using an endpoint definition using the [sttp client](https://github.com/softwaremill/sttp), import:
@@ -101,7 +101,7 @@ In this case add the following dependencies (note the [`%%%`](https://www.scala-
101101
instead of the usual `%%`):
102102

103103
```scala
104-
"com.softwaremill.sttp.tapir" %%% "tapir-sttp-client" % "1.11.11"
104+
"com.softwaremill.sttp.tapir" %%% "tapir-sttp-client" % "1.11.12"
105105
"io.github.cquiroz" %%% "scala-java-time" % "2.2.0" // implementations of java.time classes for Scala.JS
106106
```
107107

generated-doc/out/docs/asyncapi.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
To use, add the following dependencies:
44

55
```scala
6-
"com.softwaremill.sttp.tapir" %% "tapir-asyncapi-docs" % "1.11.11"
6+
"com.softwaremill.sttp.tapir" %% "tapir-asyncapi-docs" % "1.11.12"
77
"com.softwaremill.sttp.apispec" %% "asyncapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec
88
```
99

generated-doc/out/docs/json-schema.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
You can conveniently generate JSON schema from Tapir schema, which can be derived from your Scala types. Use `TapirSchemaToJsonSchema`:
44

55
```scala
6-
"com.softwaremill.sttp.tapir" %% "tapir-apispec-docs" % "1.11.11"
6+
"com.softwaremill.sttp.tapir" %% "tapir-apispec-docs" % "1.11.12"
77
```
88

99
Schema generation can now be performed like in the following example:

generated-doc/out/docs/openapi.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ these steps can be done separately, giving you complete control over the process
1313
To generate OpenAPI documentation and expose it using the Swagger UI in a single step, first add the dependency:
1414

1515
```scala
16-
"com.softwaremill.sttp.tapir" %% "tapir-swagger-ui-bundle" % "1.11.11"
16+
"com.softwaremill.sttp.tapir" %% "tapir-swagger-ui-bundle" % "1.11.12"
1717
```
1818

1919
Then, you can interpret a list of endpoints using `SwaggerInterpreter`. The result will be a list of file-serving
@@ -55,7 +55,7 @@ for details.
5555
Similarly as above, you'll need the following dependency:
5656

5757
```scala
58-
"com.softwaremill.sttp.tapir" %% "tapir-redoc-bundle" % "1.11.11"
58+
"com.softwaremill.sttp.tapir" %% "tapir-redoc-bundle" % "1.11.12"
5959
```
6060

6161
And the server endpoints can be generated using the `sttp.tapir.redoc.bundle.RedocInterpreter` class.
@@ -65,7 +65,7 @@ And the server endpoints can be generated using the `sttp.tapir.redoc.bundle.Red
6565
To generate the docs in the OpenAPI yaml format, add the following dependencies:
6666

6767
```scala
68-
"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.11.11"
68+
"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.11.12"
6969
"com.softwaremill.sttp.apispec" %% "openapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec
7070
```
7171

@@ -133,7 +133,7 @@ For example, generating the OpenAPI 3.0.3 YAML string can be achieved by perform
133133

134134
Firstly add dependencies:
135135
```scala
136-
"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.11.11"
136+
"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.11.12"
137137
"com.softwaremill.sttp.apispec" %% "openapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec
138138
```
139139

@@ -163,12 +163,12 @@ The modules `tapir-swagger-ui` and `tapir-redoc` contain server endpoint definit
163163
yaml format, will expose it using the given context path. To use, add as a dependency either
164164
`tapir-swagger-ui`:
165165
```scala
166-
"com.softwaremill.sttp.tapir" %% "tapir-swagger-ui" % "1.11.11"
166+
"com.softwaremill.sttp.tapir" %% "tapir-swagger-ui" % "1.11.12"
167167
```
168168

169169
or `tapir-redoc`:
170170
```scala
171-
"com.softwaremill.sttp.tapir" %% "tapir-redoc" % "1.11.11"
171+
"com.softwaremill.sttp.tapir" %% "tapir-redoc" % "1.11.12"
172172
```
173173

174174
Then, you'll need to pass the server endpoints to your server interpreter. For example, using akka-http:

generated-doc/out/endpoint/integrations.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ The `tapir-cats` module contains additional instances for some [cats](https://ty
1212
datatypes as well as additional syntax:
1313

1414
```scala
15-
"com.softwaremill.sttp.tapir" %% "tapir-cats" % "1.11.11"
15+
"com.softwaremill.sttp.tapir" %% "tapir-cats" % "1.11.12"
1616
```
1717

1818
- `import sttp.tapir.integ.cats.codec.*` - brings schema, validator and codec instances
@@ -22,7 +22,7 @@ Additionally, the `tapir-cats-effect` module contains an implementation of the `
2222
between the sttp-internal `MonadError` and the cats-effect `Sync` typeclass:
2323

2424
```scala
25-
"com.softwaremill.sttp.tapir" %% "tapir-cats-effect" % "1.11.11"
25+
"com.softwaremill.sttp.tapir" %% "tapir-cats-effect" % "1.11.12"
2626
```
2727

2828
## Refined integration
@@ -31,7 +31,7 @@ If you use [refined](https://github.com/fthomas/refined), the `tapir-refined` mo
3131
validators for `T Refined P` as long as a codec for `T` already exists:
3232

3333
```scala
34-
"com.softwaremill.sttp.tapir" %% "tapir-refined" % "1.11.11"
34+
"com.softwaremill.sttp.tapir" %% "tapir-refined" % "1.11.12"
3535
```
3636

3737
You'll need to extend the `sttp.tapir.codec.refined.TapirCodecRefined`
@@ -52,7 +52,7 @@ If you use [iron](https://github.com/Iltotore/iron), the `tapir-iron` module wil
5252
validators for `T :| P` as long as a codec for `T` already exists:
5353

5454
```scala
55-
"com.softwaremill.sttp.tapir" %% "tapir-iron" % "1.11.11"
55+
"com.softwaremill.sttp.tapir" %% "tapir-iron" % "1.11.12"
5656
```
5757

5858
The module is only available for Scala 3 since iron is not designed to work with Scala 2.
@@ -145,7 +145,7 @@ The `tapir-enumeratum` module provides schemas, validators and codecs for [Enume
145145
enumerations. To use, add the following dependency:
146146

147147
```scala
148-
"com.softwaremill.sttp.tapir" %% "tapir-enumeratum" % "1.11.11"
148+
"com.softwaremill.sttp.tapir" %% "tapir-enumeratum" % "1.11.12"
149149
```
150150

151151
Then, `import sttp.tapir.codec.enumeratum.*`, or extends the `sttp.tapir.codec.enumeratum.TapirCodecEnumeratum` trait.
@@ -158,7 +158,7 @@ If you use [scala-newtype](https://github.com/estatico/scala-newtype), the `tapi
158158
schemas for types with a `@newtype` and `@newsubtype` annotations as long as a codec and schema for its underlying value already exists:
159159

160160
```scala
161-
"com.softwaremill.sttp.tapir" %% "tapir-newtype" % "1.11.11"
161+
"com.softwaremill.sttp.tapir" %% "tapir-newtype" % "1.11.12"
162162
```
163163

164164
Then, `import sttp.tapir.codec.newtype.*`, or extend the `sttp.tapir.codec.newtype.TapirCodecNewType` trait to bring the implicit values into scope.
@@ -169,7 +169,7 @@ If you use [monix newtypes](https://github.com/monix/newtypes), the `tapir-monix
169169
schemas for types which extend `NewtypeWrapped` and `NewsubtypeWrapped` annotations as long as a codec and schema for its underlying value already exists:
170170

171171
```scala
172-
"com.softwaremill.sttp.tapir" %% "tapir-monix-newtype" % "1.11.11"
172+
"com.softwaremill.sttp.tapir" %% "tapir-monix-newtype" % "1.11.12"
173173
```
174174

175175
Then, `import sttp.tapir.codec.monix.newtype.*`, or extend the `sttp.tapir.codec.monix.newtype.TapirCodecMonixNewType` trait to bring the implicit values into scope.
@@ -180,7 +180,7 @@ If you use [ZIO Prelude Newtypes](https://zio.github.io/zio-prelude/docs/newtype
180180
schemas for types defined using `Newtype` and `Subtype` as long as a codec and a schema for the underlying type already exists:
181181

182182
```scala
183-
"com.softwaremill.sttp.tapir" %% "tapir-zio-prelude" % "1.11.11"
183+
"com.softwaremill.sttp.tapir" %% "tapir-zio-prelude" % "1.11.12"
184184
```
185185

186186
Then, mix in `sttp.tapir.codec.zio.prelude.newtype.TapirNewtypeSupport` into your newtype to bring the implicit values into scope:
@@ -219,7 +219,7 @@ For details refer to [derevo documentation](https://github.com/tofu-tf/derevo#in
219219
To use, add the following dependency:
220220

221221
```scala
222-
"com.softwaremill.sttp.tapir" %% "tapir-derevo" % "1.11.11"
222+
"com.softwaremill.sttp.tapir" %% "tapir-derevo" % "1.11.12"
223223
```
224224

225225
Then you can derive schema for your ADT along with other typeclasses besides ADT declaration itself:

generated-doc/out/endpoint/json.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ stringJsonBody.schema(implicitly[Schema[MyBody]].as[String])
5050
To use [Circe](https://github.com/circe/circe), add the following dependency to your project:
5151

5252
```scala
53-
"com.softwaremill.sttp.tapir" %% "tapir-json-circe" % "1.11.11"
53+
"com.softwaremill.sttp.tapir" %% "tapir-json-circe" % "1.11.12"
5454
```
5555

5656
Next, import the package (or extend the `TapirJsonCirce` trait, see [MyTapir](../other/mytapir.md)):
@@ -122,7 +122,7 @@ Now the above JSON object will render as
122122
To use [µPickle](http://www.lihaoyi.com/upickle/) add the following dependency to your project:
123123

124124
```scala
125-
"com.softwaremill.sttp.tapir" %% "tapir-json-upickle" % "1.11.11"
125+
"com.softwaremill.sttp.tapir" %% "tapir-json-upickle" % "1.11.12"
126126
```
127127

128128
Next, import the package (or extend the `TapirJsonuPickle` trait, see [MyTapir](../other/mytapir.md) and add `TapirJsonuPickle` not `TapirCirceJson`):
@@ -156,13 +156,13 @@ For more examples, including making a custom encoder/decoder, see [TapirJsonuPic
156156
To use [Play JSON](https://github.com/playframework/play-json) for **Play 3.0**, add the following dependency to your project:
157157

158158
```scala
159-
"com.softwaremill.sttp.tapir" %% "tapir-json-play" % "1.11.11"
159+
"com.softwaremill.sttp.tapir" %% "tapir-json-play" % "1.11.12"
160160
```
161161

162162
For **Play 2.9** use:
163163

164164
```scala
165-
"com.softwaremill.sttp.tapir" %% "tapir-json-play29" % "1.11.11"
165+
"com.softwaremill.sttp.tapir" %% "tapir-json-play29" % "1.11.12"
166166
```
167167

168168
Next, import the package (or extend the `TapirJsonPlay` trait, see [MyTapir](../other/mytapir.md) and add `TapirJsonPlay` not `TapirCirceJson`):
@@ -178,7 +178,7 @@ Play JSON requires `Reads` and `Writes` implicit values in scope for each type y
178178
To use [Spray JSON](https://github.com/spray/spray-json) add the following dependency to your project:
179179

180180
```scala
181-
"com.softwaremill.sttp.tapir" %% "tapir-json-spray" % "1.11.11"
181+
"com.softwaremill.sttp.tapir" %% "tapir-json-spray" % "1.11.12"
182182
```
183183

184184
Next, import the package (or extend the `TapirJsonSpray` trait, see [MyTapir](../other/mytapir.md) and add `TapirJsonSpray` not `TapirCirceJson`):
@@ -194,7 +194,7 @@ Spray JSON requires a `JsonFormat` implicit value in scope for each type you wan
194194
To use [Tethys JSON](https://github.com/tethys-json/tethys) add the following dependency to your project:
195195

196196
```scala
197-
"com.softwaremill.sttp.tapir" %% "tapir-json-tethys" % "1.11.11"
197+
"com.softwaremill.sttp.tapir" %% "tapir-json-tethys" % "1.11.12"
198198
```
199199

200200
Next, import the package (or extend the `TapirJsonTethys` trait, see [MyTapir](../other/mytapir.md) and add `TapirJsonTethys` not `TapirCirceJson`):
@@ -210,7 +210,7 @@ Tethys JSON requires `JsonReader` and `JsonWriter` implicit values in scope for
210210
To use [Jsoniter-scala](https://github.com/plokhotnyuk/jsoniter-scala) add the following dependency to your project:
211211

212212
```scala
213-
"com.softwaremill.sttp.tapir" %% "tapir-jsoniter-scala" % "1.11.11"
213+
"com.softwaremill.sttp.tapir" %% "tapir-jsoniter-scala" % "1.11.12"
214214
```
215215

216216
Next, import the package (or extend the `TapirJsonJsoniter` trait, see [MyTapir](../other/mytapir.md) and add `TapirJsonJsoniter` not `TapirCirceJson`):
@@ -226,7 +226,7 @@ Jsoniter Scala requires `JsonValueCodec` implicit value in scope for each type y
226226
To use [json4s](https://github.com/json4s/json4s) add the following dependencies to your project:
227227

228228
```scala
229-
"com.softwaremill.sttp.tapir" %% "tapir-json-json4s" % "1.11.11"
229+
"com.softwaremill.sttp.tapir" %% "tapir-json-json4s" % "1.11.12"
230230
```
231231

232232
And one of the implementations:
@@ -257,7 +257,7 @@ given Formats = org.json4s.jackson.Serialization.formats(NoTypeHints)
257257
To use [zio-json](https://github.com/zio/zio-json), add the following dependency to your project:
258258

259259
```scala
260-
"com.softwaremill.sttp.tapir" %% "tapir-json-zio" % "1.11.11"
260+
"com.softwaremill.sttp.tapir" %% "tapir-json-zio" % "1.11.12"
261261
```
262262
Next, import the package (or extend the `TapirJsonZio` trait, see [MyTapir](../other/mytapir.md) and add `TapirJsonZio` instead of `TapirCirceJson`):
263263

generated-doc/out/endpoint/pickler.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ In [other](json.md) tapir-JSON integrations, you have to keep the `Schema` (whic
99
To use pickler, add the following dependency to your project:
1010

1111
```scala
12-
"com.softwaremill.sttp.tapir" %% "tapir-json-pickler" % "1.11.11"
12+
"com.softwaremill.sttp.tapir" %% "tapir-json-pickler" % "1.11.12"
1313
```
1414

1515
Please note that it is available only for Scala 3 and Scala.JS 3.

generated-doc/out/endpoint/static.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ the API documentation of the old static content API, switch documentation to an
1111
In order to use static content endpoints, add the module to your dependencies:
1212

1313
```scala
14-
"com.softwaremill.sttp.tapir" %% "tapir-files" % "1.11.11"
14+
"com.softwaremill.sttp.tapir" %% "tapir-files" % "1.11.12"
1515
```
1616

1717
## Files

generated-doc/out/endpoint/websockets.md

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,43 @@ When creating a `webSocketBody`, we need to provide the following parameters:
3232
* the `Streams` implementation, which determines the pipe type
3333

3434
By default, ping-pong frames are handled automatically, fragmented frames are combined, and close frames aren't
35-
decoded, but this can be customised through methods on `webSocketBody`.
35+
decoded, but this can be customized through methods on `webSocketBody`.
36+
37+
## Close frames
38+
39+
If you are using the default codecs between `WebSocketFrame` and your high-level types, and you'd like to either be
40+
notified that a websocket has been closed by the client, or close it from the server side, then you should wrap your
41+
high-level type into an `Option`.
42+
43+
The default codecs map close frames to `None`, and regular (decoded text/binary) frames to `Some`. Hence, using the
44+
following definition:
45+
46+
```scala
47+
webSocketBody[Option[String], CodecFormat.TextPlain, Option[Response], CodecFormat.Json](PekkoStreams)
48+
```
49+
50+
the websocket-processing pipe will receive a `None: Option[String]` when the client closes the web socket. Moreover,
51+
if the pipe emits a `None: Option[Response]`, the web socket will be closed by the server.
52+
53+
Alternatively, if the codec for your high-level type already handles close frames (but its schema is not derived as
54+
optional), you can request that the close frames are decoded by the codec as well. Here's an example which does this
55+
on the server side:
56+
57+
```scala
58+
webSocketBody[...](...).decodeCloseRequests(true)
59+
```
60+
61+
If you'd like to decode close frames when the endpoint is interpreted as a client, you should use the
62+
`decodeCloseResponses` method.
63+
64+
```{note}
65+
Not all server interpreters expose control frames (such as close frames) to user (and Tapir) code. Refer to the
66+
documentation of individual interpreters for more details.
67+
```
3668

3769
## Raw web sockets
3870

39-
Alternatively, it's possible to obtain a raw pipe transforming `WebSocketFrame`s:
71+
The second web socket handling variant is to obtain a raw pipe transforming `WebSocketFrame`s:
4072

4173
```scala
4274
import org.apache.pekko.stream.scaladsl.Flow
@@ -53,11 +85,11 @@ endpoint.out(webSocketBodyRaw(PekkoStreams)): PublicEndpoint[
5385
```
5486

5587
Such a pipe by default doesn't handle ping-pong frames automatically, doesn't concatenate fragmented flames, and
56-
passes close frames to the pipe as well. As before, this can be customised by methods on the returned output.
88+
passes close frames to the pipe as well. As before, this can be customized by methods on the returned output.
5789

58-
Request/response schemas can be customised through `.requestsSchema` and `.responsesSchema`.
90+
Request/response schemas can be customized through `.requestsSchema` and `.responsesSchema`.
5991

60-
## Interpreting as a sever
92+
## Interpreting as a server
6193

6294
When interpreting a web socket endpoint as a server, the [server logic](../server/logic.md) needs to provide a
6395
streaming-specific pipe from requests to responses. E.g. in Pekko's case, this will be `Flow[REQ, RESP, Any]`.

generated-doc/out/generator/sbt-openapi-codegen.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ This is a really early alpha implementation.
99
Add the sbt plugin to the `project/plugins.sbt`:
1010

1111
```scala
12-
addSbtPlugin("com.softwaremill.sttp.tapir" % "sbt-openapi-codegen" % "1.11.11")
12+
addSbtPlugin("com.softwaremill.sttp.tapir" % "sbt-openapi-codegen" % "1.11.12")
1313
```
1414

1515
Enable the plugin for your project in the `build.sbt`:

0 commit comments

Comments
 (0)