Skip to content

Commit

Permalink
Release 1.11.12
Browse files Browse the repository at this point in the history
  • Loading branch information
adamw committed Jan 10, 2025
1 parent 82d17d9 commit 2abe18a
Show file tree
Hide file tree
Showing 38 changed files with 184 additions and 142 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ val booksListingRequest: Request[DecodeResult[Either[String, List[Book]]], Any]
Add the following dependency:

```sbt
"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.11.12"
```

Then, import:
Expand Down
2 changes: 1 addition & 1 deletion generated-doc/out/client/http4s.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Add the dependency:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-http4s-client" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-http4s-client" % "1.11.12"
```

To interpret an endpoint definition as an `org.http4s.Request[F]`, import:
Expand Down
4 changes: 2 additions & 2 deletions generated-doc/out/client/play.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ See the [Play framework documentation](https://www.playframework.com/documentati
For **Play 3.0**, add the dependency:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-play-client" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-play-client" % "1.11.12"
```

For **Play 2.9**, add

```scala
"com.softwaremill.sttp.tapir" %% "tapir-play29-client" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-play29-client" % "1.11.12"
```

instead. Furthermore, replace all uses of `sttp.capabilities.pekko.PekkoStreams` in the following code snippets with `sttp.capabilities.akka.AkkaStreams`.
Expand Down
4 changes: 2 additions & 2 deletions generated-doc/out/client/sttp.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Add the dependency:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-sttp-client" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-sttp-client" % "1.11.12"
```

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

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

Expand Down
2 changes: 1 addition & 1 deletion generated-doc/out/docs/asyncapi.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
To use, add the following dependencies:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-asyncapi-docs" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-asyncapi-docs" % "1.11.12"
"com.softwaremill.sttp.apispec" %% "asyncapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec
```

Expand Down
2 changes: 1 addition & 1 deletion generated-doc/out/docs/json-schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
You can conveniently generate JSON schema from Tapir schema, which can be derived from your Scala types. Use `TapirSchemaToJsonSchema`:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-apispec-docs" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-apispec-docs" % "1.11.12"
```

Schema generation can now be performed like in the following example:
Expand Down
12 changes: 6 additions & 6 deletions generated-doc/out/docs/openapi.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ these steps can be done separately, giving you complete control over the process
To generate OpenAPI documentation and expose it using the Swagger UI in a single step, first add the dependency:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-swagger-ui-bundle" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-swagger-ui-bundle" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-redoc-bundle" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-redoc-bundle" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.11.12"
"com.softwaremill.sttp.apispec" %% "openapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec
```

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

Firstly add dependencies:
```scala
"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.11.12"
"com.softwaremill.sttp.apispec" %% "openapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec
```

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

or `tapir-redoc`:
```scala
"com.softwaremill.sttp.tapir" %% "tapir-redoc" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-redoc" % "1.11.12"
```

Then, you'll need to pass the server endpoints to your server interpreter. For example, using akka-http:
Expand Down
18 changes: 9 additions & 9 deletions generated-doc/out/endpoint/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ The `tapir-cats` module contains additional instances for some [cats](https://ty
datatypes as well as additional syntax:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-cats" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-cats" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-cats-effect" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-cats-effect" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-refined" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-refined" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-iron" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-iron" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-enumeratum" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-enumeratum" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-newtype" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-newtype" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-monix-newtype" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-monix-newtype" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-zio-prelude" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-zio-prelude" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-derevo" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-derevo" % "1.11.12"
```

Then you can derive schema for your ADT along with other typeclasses besides ADT declaration itself:
Expand Down
18 changes: 9 additions & 9 deletions generated-doc/out/endpoint/json.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ stringJsonBody.schema(implicitly[Schema[MyBody]].as[String])
To use [Circe](https://github.com/circe/circe), add the following dependency to your project:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-json-circe" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-json-circe" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-json-upickle" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-json-upickle" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-json-play" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-json-play" % "1.11.12"
```

For **Play 2.9** use:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-json-play29" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-json-play29" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-json-spray" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-json-spray" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-json-tethys" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-json-tethys" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-jsoniter-scala" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-jsoniter-scala" % "1.11.12"
```

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

```scala
"com.softwaremill.sttp.tapir" %% "tapir-json-json4s" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-json-json4s" % "1.11.12"
```

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

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

Expand Down
2 changes: 1 addition & 1 deletion generated-doc/out/endpoint/pickler.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ In [other](json.md) tapir-JSON integrations, you have to keep the `Schema` (whic
To use pickler, add the following dependency to your project:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-json-pickler" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-json-pickler" % "1.11.12"
```

Please note that it is available only for Scala 3 and Scala.JS 3.
Expand Down
2 changes: 1 addition & 1 deletion generated-doc/out/endpoint/static.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ the API documentation of the old static content API, switch documentation to an
In order to use static content endpoints, add the module to your dependencies:

```scala
"com.softwaremill.sttp.tapir" %% "tapir-files" % "1.11.11"
"com.softwaremill.sttp.tapir" %% "tapir-files" % "1.11.12"
```

## Files
Expand Down
42 changes: 37 additions & 5 deletions generated-doc/out/endpoint/websockets.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,43 @@ When creating a `webSocketBody`, we need to provide the following parameters:
* the `Streams` implementation, which determines the pipe type

By default, ping-pong frames are handled automatically, fragmented frames are combined, and close frames aren't
decoded, but this can be customised through methods on `webSocketBody`.
decoded, but this can be customized through methods on `webSocketBody`.

## Close frames

If you are using the default codecs between `WebSocketFrame` and your high-level types, and you'd like to either be
notified that a websocket has been closed by the client, or close it from the server side, then you should wrap your
high-level type into an `Option`.

The default codecs map close frames to `None`, and regular (decoded text/binary) frames to `Some`. Hence, using the
following definition:

```scala
webSocketBody[Option[String], CodecFormat.TextPlain, Option[Response], CodecFormat.Json](PekkoStreams)
```

the websocket-processing pipe will receive a `None: Option[String]` when the client closes the web socket. Moreover,
if the pipe emits a `None: Option[Response]`, the web socket will be closed by the server.

Alternatively, if the codec for your high-level type already handles close frames (but its schema is not derived as
optional), you can request that the close frames are decoded by the codec as well. Here's an example which does this
on the server side:

```scala
webSocketBody[...](...).decodeCloseRequests(true)
```

If you'd like to decode close frames when the endpoint is interpreted as a client, you should use the
`decodeCloseResponses` method.

```{note}
Not all server interpreters expose control frames (such as close frames) to user (and Tapir) code. Refer to the
documentation of individual interpreters for more details.
```

## Raw web sockets

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

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

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

Request/response schemas can be customised through `.requestsSchema` and `.responsesSchema`.
Request/response schemas can be customized through `.requestsSchema` and `.responsesSchema`.

## Interpreting as a sever
## Interpreting as a server

When interpreting a web socket endpoint as a server, the [server logic](../server/logic.md) needs to provide a
streaming-specific pipe from requests to responses. E.g. in Pekko's case, this will be `Flow[REQ, RESP, Any]`.
Expand Down
2 changes: 1 addition & 1 deletion generated-doc/out/generator/sbt-openapi-codegen.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ This is a really early alpha implementation.
Add the sbt plugin to the `project/plugins.sbt`:

```scala
addSbtPlugin("com.softwaremill.sttp.tapir" % "sbt-openapi-codegen" % "1.11.11")
addSbtPlugin("com.softwaremill.sttp.tapir" % "sbt-openapi-codegen" % "1.11.12")
```

Enable the plugin for your project in the `build.sbt`:
Expand Down
Loading

0 comments on commit 2abe18a

Please sign in to comment.