Skip to content

Commit

Permalink
further simplications...
Browse files Browse the repository at this point in the history
  • Loading branch information
jnicoulaud-ledger committed Nov 4, 2023
1 parent 6e22351 commit 9a6000b
Showing 1 changed file with 3 additions and 9 deletions.
12 changes: 3 additions & 9 deletions modules/api/src/main/scala/types.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,12 @@ import cats.syntax.all.*
import io.github.iltotore.iron.*
import io.github.iltotore.iron.constraint.all.*
import sttp.tapir
import sttp.tapir.Codec.PlainCodec as TapirPlainCodec
import sttp.tapir.Codec.PlainCodec
import sttp.tapir.codec.iron.TapirCodecIron
import sttp.tapir.{CodecFormat, DecodeResult, Codec as TapirCodec, Schema as TapirSchema}

extension[L, H: Show, CF <: CodecFormat] (codec: TapirCodec[L, H, CF])
def iemap[HH](f: H => Either[String, HH])(g: HH => H): TapirCodec[L, HH, CF] =
codec.mapDecode(s => DecodeResult.fromEitherString(s.show, f(s)))(g)

private type VersionConstraints = DescribedAs[GreaterEqual[0], "Version must be positive"]
opaque type Version = Int :| VersionConstraints

object Version extends RefinedTypeOps[Int, VersionConstraints, Version], TapirCodecIron:
given TapirPlainCodec[Version] = summon[TapirPlainCodec[Int]].iemap(either(_))(_.value)

given TapirSchema[Version] = ironTypeSchema[Int, VersionConstraints]
object Version extends RefinedTypeOps[Int, VersionConstraints, Version] with TapirCodecIron:
given PlainCodec[Version] = summon[PlainCodec[Int]].mapDecode(s => DecodeResult.fromEitherString(s.show, either(s)))(_.value)

0 comments on commit 9a6000b

Please sign in to comment.