Datatypes integrations¶
Cats datatypes integration¶
The tapir-cats
module contains additional instances for some cats
datatypes as well as additional syntax:
"com.softwaremill.sttp.tapir" %% "tapir-cats" % "0.17.0-M7"
import sttp.tapir.integ.cats.codec._
- brings schema, validator and codec instancesimport sttp.tapir.integ.cats.syntax._
- brings additional syntax fortapir
types
Refined integration¶
If you use refined, the tapir-refined
module will provide implicit codecs and
validators for T Refined P
as long as a codec for T
already exists:
"com.softwaremill.sttp.tapir" %% "tapir-refined" % "0.17.0-M7"
You’ll need to extend the sttp.tapir.codec.refined.TapirCodecRefined
trait or import sttp.tapir.codec.refined._
to bring the implicit values into scope.
The refined codecs contain a validator which wrap/unwrap the value from/to its refined equivalent.
Some predicates will bind correctly to the vanilla tapir Validator, while others will bind to a custom validator that
might not be very clear when reading the generated documentation. Correctly bound predicates can be found in
integration/refined/src/main/scala/sttp/tapir/codec/refined/TapirCodecRefined.scala
.
If you are not satisfied with the validator generated by tapir-refined
, you can provide an implicit
ValidatorForPredicate[T, P]
in scope using `ValidatorForPredicate.fromPrimitiveValidator’ to build it (do not
hesitate to contribute your work!).
Enumeratum integration¶
The tapir-enumeratum
module provides schemas, validators and codecs for Enumeratum
enumerations. To use, add the following dependency:
"com.softwaremill.sttp.tapir" %% "tapir-enumeratum" % "0.17.0-M7"
Then, import sttp.tapir.codec.enumeratum
, or extends the sttp.tapir.codec.enumeratum.TapirCodecEnumeratum
trait.
This will bring into scope implicit values for values extending *EnumEntry
.
Enumeration integration¶
There is no library for the use of the build in scala Enumeration
, but it can be implemented by hand.
The example code below will generate enums to the open-api documentation.
import sttp.tapir._
import sttp.tapir.codec.enumeratum._
import enumeratum._
trait EnumHelper { e: Enumeration =>
import io.circe._
implicit val enumDecoder: Decoder[e.Value] = Decoder.decodeEnumeration(e)
implicit val enumEncoder: Encoder[e.Value] = Encoder.encodeEnumeration(e)
implicit val schemaForEnum: Schema[e.Value] = Schema(SchemaType.SString)
implicit def validatorForEnum: Validator[e.Value] = Validator.`enum`(e.values.toList, v => Option(v))
}
object Color extends Enumeration with EnumHelper {
type Color = Value
val Blue = Value("blue")
val Red = Value("red")
}