diff --git a/README.md b/README.md index 5b8cd4b635..dd6fda5b7b 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,7 @@ tapir documentation is available at [tapir.softwaremill.com](http://tapir.softwa Add the following dependency: ```sbt -"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.10.5" ``` Then, import: diff --git a/generated-doc/out/client/http4s.md b/generated-doc/out/client/http4s.md index 175dc31a63..78de3b072b 100644 --- a/generated-doc/out/client/http4s.md +++ b/generated-doc/out/client/http4s.md @@ -3,7 +3,7 @@ Add the dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-http4s-client" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-http4s-client" % "1.10.5" ``` To interpret an endpoint definition as an `org.http4s.Request[F]`, import: diff --git a/generated-doc/out/client/play.md b/generated-doc/out/client/play.md index 1a67cd608c..86ebeb2dbf 100644 --- a/generated-doc/out/client/play.md +++ b/generated-doc/out/client/play.md @@ -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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-play-client" % "1.10.5" ``` For **Play 2.9**, add ```scala -"com.softwaremill.sttp.tapir" %% "tapir-play29-client" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-play29-client" % "1.10.5" ``` instead. Furthermore, replace all uses of `sttp.capabilities.pekko.PekkoStreams` in the following code snippets with `sttp.capabilities.akka.AkkaStreams`. diff --git a/generated-doc/out/client/sttp.md b/generated-doc/out/client/sttp.md index b851df4b4c..d34f3dfe88 100644 --- a/generated-doc/out/client/sttp.md +++ b/generated-doc/out/client/sttp.md @@ -3,7 +3,7 @@ Add the dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-sttp-client" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-sttp-client" % "1.10.5" ``` 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- instead of the usual `%%`): ```scala -"com.softwaremill.sttp.tapir" %%% "tapir-sttp-client" % "1.10.4" +"com.softwaremill.sttp.tapir" %%% "tapir-sttp-client" % "1.10.5" "io.github.cquiroz" %%% "scala-java-time" % "2.2.0" // implementations of java.time classes for Scala.JS ``` diff --git a/generated-doc/out/contributing.md b/generated-doc/out/contributing.md index 1452c72f93..8b77575e6c 100644 --- a/generated-doc/out/contributing.md +++ b/generated-doc/out/contributing.md @@ -24,7 +24,7 @@ To ensure that Tapir can be used in a wide range of projects, the CI job uses JD For local development, feel free to use any JDK >= 11. You can be on JDK 21, then with missing `ONLY_LOOM` variable you can still run sbt tasks on projects excluded from aggegate build, for example: ```scala nimaServer/Test/test -nettyServerLoom/compile +nettyServerSync3/compile // etc. ``` diff --git a/generated-doc/out/docs/asyncapi.md b/generated-doc/out/docs/asyncapi.md index 0dfcfa94f1..7e900703c0 100644 --- a/generated-doc/out/docs/asyncapi.md +++ b/generated-doc/out/docs/asyncapi.md @@ -3,7 +3,7 @@ To use, add the following dependencies: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-asyncapi-docs" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-asyncapi-docs" % "1.10.5" "com.softwaremill.sttp.apispec" %% "asyncapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec ``` diff --git a/generated-doc/out/docs/json-schema.md b/generated-doc/out/docs/json-schema.md index ea653eb5ec..308fccb6af 100644 --- a/generated-doc/out/docs/json-schema.md +++ b/generated-doc/out/docs/json-schema.md @@ -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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-apispec-docs" % "1.10.5" ``` Schema generation can now be performed like in the following example: diff --git a/generated-doc/out/docs/openapi.md b/generated-doc/out/docs/openapi.md index e2486cb775..0bf6f26d06 100644 --- a/generated-doc/out/docs/openapi.md +++ b/generated-doc/out/docs/openapi.md @@ -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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-swagger-ui-bundle" % "1.10.5" ``` 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. Similarly as above, you'll need the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-redoc-bundle" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-redoc-bundle" % "1.10.5" ``` 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 To generate the docs in the OpenAPI yaml format, add the following dependencies: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.10.5" "com.softwaremill.sttp.apispec" %% "openapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec ``` @@ -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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-openapi-docs" % "1.10.5" "com.softwaremill.sttp.apispec" %% "openapi-circe-yaml" % "..." // see https://github.com/softwaremill/sttp-apispec ``` @@ -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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-swagger-ui" % "1.10.5" ``` or `tapir-redoc`: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-redoc" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-redoc" % "1.10.5" ``` Then, you'll need to pass the server endpoints to your server interpreter. For example, using akka-http: diff --git a/generated-doc/out/endpoint/integrations.md b/generated-doc/out/endpoint/integrations.md index 92523eaf04..0c7bce6893 100644 --- a/generated-doc/out/endpoint/integrations.md +++ b/generated-doc/out/endpoint/integrations.md @@ -14,7 +14,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-cats" % "1.10.5" ``` - `import sttp.tapir.integ.cats.codec._` - brings schema, validator and codec instances @@ -24,7 +24,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-cats-effect" % "1.10.5" ``` ## Refined integration @@ -33,7 +33,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-refined" % "1.10.5" ``` You'll need to extend the `sttp.tapir.codec.refined.TapirCodecRefined` @@ -54,7 +54,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-iron" % "1.10.5" ``` The module is only available for Scala 3 since iron is not designed to work with Scala 2. @@ -146,7 +146,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-enumeratum" % "1.10.5" ``` Then, `import sttp.tapir.codec.enumeratum._`, or extends the `sttp.tapir.codec.enumeratum.TapirCodecEnumeratum` trait. @@ -159,7 +159,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-newtype" % "1.10.5" ``` Then, `import sttp.tapir.codec.newtype._`, or extend the `sttp.tapir.codec.newtype.TapirCodecNewType` trait to bring the implicit values into scope. @@ -170,7 +170,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-monix-newtype" % "1.10.5" ``` Then, `import sttp.tapir.codec.monix.newtype._`, or extend the `sttp.tapir.codec.monix.newtype.TapirCodecMonixNewType` trait to bring the implicit values into scope. @@ -181,7 +181,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-zio-prelude" % "1.10.5" ``` Then, mix in `sttp.tapir.codec.zio.prelude.newtype.TapirNewtypeSupport` into your newtype to bring the implicit values into scope: @@ -220,7 +220,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-derevo" % "1.10.5" ``` Then you can derive schema for your ADT along with other typeclasses besides ADT declaration itself: diff --git a/generated-doc/out/endpoint/json.md b/generated-doc/out/endpoint/json.md index ac069c3d46..cbf442f896 100644 --- a/generated-doc/out/endpoint/json.md +++ b/generated-doc/out/endpoint/json.md @@ -52,7 +52,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-circe" % "1.10.5" ``` Next, import the package (or extend the `TapirJsonCirce` trait, see [MyTapir](../mytapir.md)): @@ -125,7 +125,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-upickle" % "1.10.5" ``` Next, import the package (or extend the `TapirJsonuPickle` trait, see [MyTapir](../mytapir.md) and add `TapirJsonuPickle` not `TapirCirceJson`): @@ -160,13 +160,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-play" % "1.10.5" ``` For **Play 2.9** use: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-json-play29" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-play29" % "1.10.5" ``` Next, import the package (or extend the `TapirJsonPlay` trait, see [MyTapir](../mytapir.md) and add `TapirJsonPlay` not `TapirCirceJson`): @@ -182,7 +182,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-spray" % "1.10.5" ``` Next, import the package (or extend the `TapirJsonSpray` trait, see [MyTapir](../mytapir.md) and add `TapirJsonSpray` not `TapirCirceJson`): @@ -198,7 +198,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-tethys" % "1.10.5" ``` Next, import the package (or extend the `TapirJsonTethys` trait, see [MyTapir](../mytapir.md) and add `TapirJsonTethys` not `TapirCirceJson`): @@ -214,7 +214,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-jsoniter-scala" % "1.10.5" ``` Next, import the package (or extend the `TapirJsonJsoniter` trait, see [MyTapir](../mytapir.md) and add `TapirJsonJsoniter` not `TapirCirceJson`): @@ -230,7 +230,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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-json4s" % "1.10.5" ``` And one of the implementations: @@ -261,7 +261,7 @@ implicit val formats: Formats = org.json4s.jackson.Serialization.formats(NoTypeH 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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-zio" % "1.10.5" ``` Next, import the package (or extend the `TapirJsonZio` trait, see [MyTapir](../mytapir.md) and add `TapirJsonZio` instead of `TapirCirceJson`): diff --git a/generated-doc/out/endpoint/pickler.md b/generated-doc/out/endpoint/pickler.md index 36f039df87..f6707ed689 100644 --- a/generated-doc/out/endpoint/pickler.md +++ b/generated-doc/out/endpoint/pickler.md @@ -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.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-json-pickler" % "1.10.5" ``` Please note that it is available only for Scala 3 and Scala.JS 3. diff --git a/generated-doc/out/endpoint/static.md b/generated-doc/out/endpoint/static.md index ba55ee8aa1..43af284c62 100644 --- a/generated-doc/out/endpoint/static.md +++ b/generated-doc/out/endpoint/static.md @@ -12,7 +12,7 @@ from local files or application resources. These endpoints respect etags, byte r In order to use static content endpoints, add the module to your dependencies: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-files" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-files" % "1.10.5" ``` ## Files diff --git a/generated-doc/out/generator/sbt-openapi-codegen.md b/generated-doc/out/generator/sbt-openapi-codegen.md index 94c284094d..67bcada379 100644 --- a/generated-doc/out/generator/sbt-openapi-codegen.md +++ b/generated-doc/out/generator/sbt-openapi-codegen.md @@ -11,7 +11,7 @@ Add the sbt plugin to the `project/plugins.sbt`: ```scala -addSbtPlugin("com.softwaremill.sttp.tapir" % "sbt-openapi-codegen" % "1.10.4") +addSbtPlugin("com.softwaremill.sttp.tapir" % "sbt-openapi-codegen" % "1.10.5") ``` Enable the plugin for your project in the `build.sbt`: @@ -35,16 +35,17 @@ defined case-classes and endpoint definitions. The generator currently supports these settings, you can override them in the `build.sbt`; ```eval_rst -===================================== ==================================== ======================================================================================= +===================================== ==================================== ================================================================================================== setting default value description -===================================== ==================================== ======================================================================================= +===================================== ==================================== ================================================================================================== openapiSwaggerFile baseDirectory.value / "swagger.yaml" The swagger file with the api definitions. openapiPackage sttp.tapir.generated The name for the generated package. openapiObject TapirGeneratedEndpoints The name for the generated object. openapiUseHeadTagForObjectName false If true, put endpoints in separate files based on first declared tag. openapiJsonSerdeLib circe The json serde library to use. openapiValidateNonDiscriminatedOneOfs true Whether to fail if variants of a oneOf without a discriminator cannot be disambiguated. -===================================== ==================================== ======================================================================================= +openapiMaxSchemasPerFile 400 Maximum number of schemas to generate in a single file (tweak if hitting javac class size limits). +===================================== ==================================== ================================================================================================== ``` The general usage is; diff --git a/generated-doc/out/migrating.md b/generated-doc/out/migrating.md index 3d61874a17..bbd915f12a 100644 --- a/generated-doc/out/migrating.md +++ b/generated-doc/out/migrating.md @@ -1,5 +1,9 @@ # Migrating +## From 1.10.4 to 1.10.5 + +- `tapir-server-netty-loom` has been renamed to `tapir-netty-server-sync`, and is availavble only for Scala 3. Use imports from `sttp.tapir.server.netty.sync`, and start your server using `NettySyncServer()`. See [examples/HelloWorldNettySyncServer.scala](https://github.com/softwaremill/tapir/blob/master/examples/src/main/scala/sttp/tapir/examples/HelloWorldNettySyncServer.scala) for a full example. + ## From 1.9.3 to 1.9.4 - `NettyConfig.defaultNoStreaming` has been removed, use `NettyConfig.default`. diff --git a/generated-doc/out/other_interpreters.md b/generated-doc/out/other_interpreters.md index b795028824..20c8ae8824 100644 --- a/generated-doc/out/other_interpreters.md +++ b/generated-doc/out/other_interpreters.md @@ -22,3 +22,7 @@ layer that allows you to create traced http endpoints from tapir Endpoint defini ## tapir-http-session [tapir-http-session](https://github.com/SOFTNETWORK-APP/tapir-http-session) provides integration with functionality of [akka-http-session](https://github.com/softwaremill/akka-http-session), which includes client-side session management in web and mobile applications. + +## tapir + kyo + +[Kyo](https://github.com/getkyo/kyo/#routes-http-server-via-tapir) includes a tapir integration module. diff --git a/generated-doc/out/quickstart.md b/generated-doc/out/quickstart.md index de574b3acd..1f7ab4eaa8 100644 --- a/generated-doc/out/quickstart.md +++ b/generated-doc/out/quickstart.md @@ -3,7 +3,7 @@ To use tapir, add the following dependency to your project: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.10.5" ``` This will import only the core classes needed to create endpoint descriptions. To generate a server or a client, you diff --git a/generated-doc/out/server/akkahttp.md b/generated-doc/out/server/akkahttp.md index 30537741a6..c3d950e08e 100644 --- a/generated-doc/out/server/akkahttp.md +++ b/generated-doc/out/server/akkahttp.md @@ -4,14 +4,14 @@ To expose an endpoint as an [akka-http](https://doc.akka.io/docs/akka-http/curre dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-akka-http-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-akka-http-server" % "1.10.5" ``` This will transitively pull some Akka modules in version 2.6. If you want to force your own Akka version (for example 2.5), use sbt exclusion. Mind the Scala version in artifact name: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-akka-http-server" % "1.10.4" exclude("com.typesafe.akka", "akka-stream_2.12") +"com.softwaremill.sttp.tapir" %% "tapir-akka-http-server" % "1.10.5" exclude("com.typesafe.akka", "akka-stream_2.12") ``` Now import the object: diff --git a/generated-doc/out/server/armeria.md b/generated-doc/out/server/armeria.md index dd7db14ad7..191e926ad7 100644 --- a/generated-doc/out/server/armeria.md +++ b/generated-doc/out/server/armeria.md @@ -8,7 +8,7 @@ Armeria interpreter can be used with different effect systems (cats-effect, ZIO) Add the following dependency ```scala -"com.softwaremill.sttp.tapir" %% "tapir-armeria-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-armeria-server" % "1.10.5" ``` and import the object: @@ -75,7 +75,7 @@ Note that Armeria automatically injects an `ExecutionContext` on top of Armeria' Add the following dependency ```scala -"com.softwaremill.sttp.tapir" %% "tapir-armeria-server-cats" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-armeria-server-cats" % "1.10.5" ``` to use this interpreter with Cats Effect typeclasses. @@ -154,7 +154,7 @@ val tapirService = ArmeriaCatsServerInterpreter(dispatcher).toService(streamingR Add the following dependency ```scala -"com.softwaremill.sttp.tapir" %% "tapir-armeria-server-zio" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-armeria-server-zio" % "1.10.5" ``` to use this interpreter with ZIO. diff --git a/generated-doc/out/server/aws.md b/generated-doc/out/server/aws.md index 0e4c330218..c10fd27fb6 100644 --- a/generated-doc/out/server/aws.md +++ b/generated-doc/out/server/aws.md @@ -33,7 +33,7 @@ These are corresponding classes for each of the supported runtime: To start using any of the above add the following dependency: ```sbt -"com.softwaremill.sttp.tapir" %% "tapir-aws-lambda" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-aws-lambda" % "1.10.5" ``` ## Deployment @@ -44,9 +44,9 @@ Tapir leverages ways of doing it provided by AWS, you can choose from: AWS SAM t You can start by adding one of the following dependencies to your project, and then follow examples: ```sbt -"com.softwaremill.sttp.tapir" %% "tapir-aws-sam" % "1.10.4" -"com.softwaremill.sttp.tapir" %% "tapir-aws-terraform" % "1.10.4" -"com.softwaremill.sttp.tapir" %% "tapir-aws-cdk" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-aws-sam" % "1.10.5" +"com.softwaremill.sttp.tapir" %% "tapir-aws-terraform" % "1.10.5" +"com.softwaremill.sttp.tapir" %% "tapir-aws-cdk" % "1.10.5" ``` ### Examples diff --git a/generated-doc/out/server/finatra.md b/generated-doc/out/server/finatra.md index 7832a1bb81..f8b3fe4309 100644 --- a/generated-doc/out/server/finatra.md +++ b/generated-doc/out/server/finatra.md @@ -4,7 +4,7 @@ To expose an endpoint as an [finatra](https://twitter.github.io/finatra/) server dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-finatra-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-finatra-server" % "1.10.5" ``` and import the object: @@ -17,7 +17,7 @@ This interpreter supports the twitter `Future`. Or, if you would like to use cats-effect project, you can add the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-finatra-server-cats" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-finatra-server-cats" % "1.10.5" ``` and import the object: diff --git a/generated-doc/out/server/http4s.md b/generated-doc/out/server/http4s.md index c8f1a81291..a818786f4e 100644 --- a/generated-doc/out/server/http4s.md +++ b/generated-doc/out/server/http4s.md @@ -4,7 +4,7 @@ To expose an endpoint as an [http4s](https://http4s.org) server, first add the f dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-http4s-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-http4s-server" % "1.10.5" ``` and import the object: diff --git a/generated-doc/out/server/jdkhttp.md b/generated-doc/out/server/jdkhttp.md index a3fdcbbe16..8aeea08d83 100644 --- a/generated-doc/out/server/jdkhttp.md +++ b/generated-doc/out/server/jdkhttp.md @@ -5,7 +5,7 @@ To expose endpoints using the (`com.sun.net.httpserver`), first add the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-jdkhttp-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-jdkhttp-server" % "1.10.5" ``` Then, import the package: diff --git a/generated-doc/out/server/netty.md b/generated-doc/out/server/netty.md index 5efafa6f34..b31c78e48c 100644 --- a/generated-doc/out/server/netty.md +++ b/generated-doc/out/server/netty.md @@ -4,22 +4,22 @@ To expose an endpoint using a [Netty](https://netty.io)-based server, first add ```scala // if you are using Future or just exploring: -"com.softwaremill.sttp.tapir" %% "tapir-netty-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-netty-server" % "1.10.5" // if you want to use Java 21 Loom virtual threads in direct style: -"com.softwaremill.sttp.tapir" %% "tapir-netty-server-sync" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-netty-server-sync" % "1.10.5" // if you are using cats-effect: -"com.softwaremill.sttp.tapir" %% "tapir-netty-server-cats" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-netty-server-cats" % "1.10.5" // if you are using zio: -"com.softwaremill.sttp.tapir" %% "tapir-netty-server-zio" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-netty-server-zio" % "1.10.5" ``` Then, use: - `NettyFutureServer().addEndpoints` to expose `Future`-based server endpoints. -- `NettyIdServer().addEndpoints` to expose `Loom`-based server endpoints. +- `NettySyncServer().addEndpoints` to expose `Loom`-based server endpoints. - `NettyCatsServer().addEndpoints` to expose `F`-based server endpoints, where `F` is any cats-effect supported effect. [Streaming](../endpoint/streaming.md) request and response bodies is supported with fs2. - `NettyZioServer().addEndpoints` to expose `ZIO`-based server endpoints, where `R` represents ZIO requirements supported effect. Streaming is supported with ZIO Streams. @@ -44,21 +44,11 @@ val binding: Future[NettyFutureServerBinding] = NettyFutureServer().addEndpoint(helloWorld).start() ``` -The `tapir-netty-server-sync` server uses `Id[T]` as its wrapper effect for compatibility, while `Id[A]` means in fact just `A`, representing direct style. +The `tapir-netty-server-sync` server uses `Id[T]` as its wrapper effect for compatibility, while `Id[A]` means in fact just `A`, representing direct style. It is +available only for Scala 3. +See [examples/HelloWorldNettySyncServer.scala](https://github.com/softwaremill/tapir/blob/master/examples/src/main/scala/sttp/tapir/examples/HelloWorldNettySyncServer.scala) for a full example. +To learn more about handling concurrency with Ox, see the [documentation](https://ox.softwaremill.com/). -```scala -import sttp.tapir._ -import sttp.tapir.server.netty.loom.{Id, NettyIdServer, NettyIdServerBinding} - -val helloWorld = endpoint - .get - .in("hello").in(query[String]("name")) - .out(stringBody) - .serverLogicSuccess[Id](name => s"Hello, $name!") - -val binding: NettyIdServerBinding = - NettyIdServer().addEndpoint(helloWorld).start() -``` ## Configuration @@ -85,7 +75,10 @@ NettyFutureServer(NettyConfig.default.socketBacklog(256)) ## Web sockets -The netty-cats interpreter supports web sockets, with pipes of type `fs2.Pipe[F, REQ, RESP]`. See [web sockets](../endpoint/websockets.md) + +### tapir-netty-server-cats + +The Cats Effects interpreter supports web sockets, with pipes of type `fs2.Pipe[F, REQ, RESP]`. See [web sockets](../endpoint/websockets.md) for more details. To create a web socket endpoint, use Tapir's `out(webSocketBody)` output type: @@ -148,6 +141,11 @@ object WebSocketsNettyCatsServer extends ResourceApp.Forever { } ``` +### tapir-netty-server-sync + +In the Loom-based backend, Tapir uses [Ox](https://ox.softwaremill.com) to manage concurrency, and your transformation pipeline should be represented as `Ox ?=> Source[A] => Source[B]`. Any forks started within this function will be run under a safely isolated internal scope. +See [examples/websocket/WebSocketNettySyncServer.scala](https://github.com/softwaremill/tapir/blob/master/examples/src/main/scala/sttp/tapir/examples/websocket/WebSocketNettySyncServer.scala) for a full example. + ## Graceful shutdown A Netty server can be gracefully closed using the function `NettyFutureServerBinding.stop()` (and analogous functions available in Cats and ZIO bindings). This function ensures that the server will wait at most 10 seconds for in-flight requests to complete, while rejecting all new requests with 503 during this period. Afterwards, it closes all server resources. diff --git a/generated-doc/out/server/nima.md b/generated-doc/out/server/nima.md index 4564902633..b2b86c5b2a 100644 --- a/generated-doc/out/server/nima.md +++ b/generated-doc/out/server/nima.md @@ -9,7 +9,7 @@ To expose an endpoint as a [Helidon Níma](https://helidon.io/nima) server, firs dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-nima-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-nima-server" % "1.10.5" ``` Loom-managed concurrency uses direct style instead of effect wrappers like `Future[T]` or `IO[T]`. Because of this, diff --git a/generated-doc/out/server/observability.md b/generated-doc/out/server/observability.md index d81ec8a924..3a30f42931 100644 --- a/generated-doc/out/server/observability.md +++ b/generated-doc/out/server/observability.md @@ -49,7 +49,7 @@ val labels = MetricLabels( Add the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-prometheus-metrics" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-prometheus-metrics" % "1.10.5" ``` `PrometheusMetrics` encapsulates `PrometheusReqistry` and `Metric` instances. It provides several ready to use metrics as @@ -128,7 +128,7 @@ val prometheusMetrics = PrometheusMetrics[Future]("tapir", PrometheusRegistry.de Add the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-opentelemetry-metrics" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-opentelemetry-metrics" % "1.10.5" ``` OpenTelemetry metrics are vendor-agnostic and can be exported using one @@ -155,7 +155,7 @@ val metricsInterceptor = metrics.metricsInterceptor() // add to your server opti Add the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-datadog-metrics" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-datadog-metrics" % "1.10.5" ``` Datadog metrics are sent as Datadog custom metrics through @@ -222,7 +222,7 @@ val datadogMetrics = DatadogMetrics.default[Future](statsdClient) Add the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-zio-metrics" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-zio-metrics" % "1.10.5" ``` Metrics have been integrated into ZIO core in ZIO2. diff --git a/generated-doc/out/server/pekkohttp.md b/generated-doc/out/server/pekkohttp.md index 9190cbe7c9..47bf110b80 100644 --- a/generated-doc/out/server/pekkohttp.md +++ b/generated-doc/out/server/pekkohttp.md @@ -4,14 +4,14 @@ To expose an endpoint as a [pekko-http](https://pekko.apache.org/docs/pekko-http dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-pekko-http-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-pekko-http-server" % "1.10.5" ``` This will transitively pull some Pekko modules. If you want to force your own Pekko version, use sbt exclusion. Mind the Scala version in artifact name: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-pekko-http-server" % "1.10.4" exclude("org.apache.pekko", "pekko-stream_2.12") +"com.softwaremill.sttp.tapir" %% "tapir-pekko-http-server" % "1.10.5" exclude("org.apache.pekko", "pekko-stream_2.12") ``` Now import the object: diff --git a/generated-doc/out/server/play.md b/generated-doc/out/server/play.md index 3446116017..15786cb517 100644 --- a/generated-doc/out/server/play.md +++ b/generated-doc/out/server/play.md @@ -6,7 +6,7 @@ See the [Play framework documentation](https://www.playframework.com/documentati To expose an endpoint as a [play-server](https://www.playframework.com/), using **Play 2.9 with Akka**, add the following dependencies: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-play29-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-play29-server" % "1.10.5" ``` and (if you don't already depend on Play) @@ -26,7 +26,7 @@ depending on whether you want to use netty or Akka based http-server under the h To expose an endpoint as a [play-server](https://www.playframework.com/), using **Play 3.0 with Pekko**, add the following dependencies: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-play-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-play-server" % "1.10.5" ``` and (if you don't already depend on Play) diff --git a/generated-doc/out/server/vertx.md b/generated-doc/out/server/vertx.md index 7116368549..6c3c26cb2d 100644 --- a/generated-doc/out/server/vertx.md +++ b/generated-doc/out/server/vertx.md @@ -8,7 +8,7 @@ Vert.x interpreter can be used with different effect systems (cats-effect, ZIO) Add the following dependency ```scala -"com.softwaremill.sttp.tapir" %% "tapir-vertx-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-vertx-server" % "1.10.5" ``` to use this interpreter with `Future`. @@ -63,7 +63,7 @@ It's also possible to define an endpoint together with the server logic in a sin Add the following dependency ```scala -"com.softwaremill.sttp.tapir" %% "tapir-vertx-server-cats" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-vertx-server-cats" % "1.10.5" ``` to use this interpreter with Cats Effect typeclasses. @@ -145,7 +145,7 @@ val attach = VertxCatsServerInterpreter(dispatcher).route(streamedResponse.serve Add the following dependency ```scala -"com.softwaremill.sttp.tapir" %% "tapir-vertx-server-zio" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-vertx-server-zio" % "1.10.5" ``` to use this interpreter with ZIO. diff --git a/generated-doc/out/server/zio-http4s.md b/generated-doc/out/server/zio-http4s.md index 4bd333f8e5..b793cc5d7d 100644 --- a/generated-doc/out/server/zio-http4s.md +++ b/generated-doc/out/server/zio-http4s.md @@ -8,13 +8,13 @@ The `*-zio` modules depend on ZIO 2.x. You'll need the following dependency for the `ZServerEndpoint` type alias and helper classes: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-zio" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-zio" % "1.10.5" ``` or just add the zio-http4s integration which already depends on `tapir-zio`: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-http4s-server-zio" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-http4s-server-zio" % "1.10.5" ``` Next, instead of the usual `import sttp.tapir._`, you should import (or extend the `ZTapir` trait, see [MyTapir](../mytapir.md)): diff --git a/generated-doc/out/server/ziohttp.md b/generated-doc/out/server/ziohttp.md index e49127efb2..1845757272 100644 --- a/generated-doc/out/server/ziohttp.md +++ b/generated-doc/out/server/ziohttp.md @@ -8,13 +8,13 @@ The `*-zio` modules depend on ZIO 2.x. You'll need the following dependency for the `ZServerEndpoint` type alias and helper classes: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-zio" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-zio" % "1.10.5" ``` or just add the zio-http integration which already depends on `tapir-zio`: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-zio-http-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-zio-http-server" % "1.10.5" ``` Next, instead of the usual `import sttp.tapir._`, you should import (or extend the `ZTapir` trait, see [MyTapir](../mytapir.md)): diff --git a/generated-doc/out/testing.md b/generated-doc/out/testing.md index 2a5503942a..5f4b9d4045 100644 --- a/generated-doc/out/testing.md +++ b/generated-doc/out/testing.md @@ -23,7 +23,7 @@ Tapir builds upon the `SttpBackendStub` to enable stubbing using `Endpoint`s or dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-sttp-stub-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-sttp-stub-server" % "1.10.5" ``` Let's assume you are using the [akka http](server/akkahttp.md) interpreter. Given the following server endpoint: @@ -142,7 +142,7 @@ requests matching an endpoint, you can use the tapir `SttpBackendStub` extension Similarly as when testing server interpreters, add the dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-sttp-stub-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-sttp-stub-server" % "1.10.5" ``` And the following imports: @@ -197,7 +197,7 @@ with [mock-server](https://www.mock-server.com/) Add the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "sttp-mock-server" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "sttp-mock-server" % "1.10.5" ``` Imports: @@ -268,7 +268,7 @@ result == out To use, add the following dependency: ```scala -"com.softwaremill.sttp.tapir" %% "tapir-testing" % "1.10.4" +"com.softwaremill.sttp.tapir" %% "tapir-testing" % "1.10.5" ``` ### Shadowed endpoints @@ -294,7 +294,7 @@ Results in: ```scala res.toString -// res2: String = "Set(GET /x, is shadowed by: GET /x/*, GET /x/y/x, is shadowed by: GET /x/*)" +// res2: String = "Set(GET /x/y/x, is shadowed by: GET /x/*, GET /x, is shadowed by: GET /x/*)" ``` Example 2: