Неявное получение схемы из класса с типом Alias

В настоящее время я использую sttp (v. 3.3.14), и у меня проблемы со схемами некоторых классов case. В частности, классы case, содержащие псевдонимы типов.

Вот простой пользовательский кодек для Either:

      import cats.implicits._
import io.circe.syntax._
import io.circe.{Codec, Decoder, Encoder}
import sttp.tapir.Schema
import io.circe.generic.semiauto._
import sttp.tapir.generic.auto._

object codecs {
  private def eitherDecoder[A, B](implicit a: Decoder[A], b: Decoder[B]): Decoder[Either[A, B]] = a.map(_.asLeft[B]) or b.map(_.asRight[A])
  private def eitherEncoder[A, B](implicit a: Encoder[A], b: Encoder[B]): Encoder[Either[A, B]] =
    Encoder.instance(_.fold(_.asJson, _.asJson))
  implicit def eitherCodec[A, B](implicit aE: Encoder[A], bE: Encoder[B], a: Decoder[A], b: Decoder[B]): Codec[Either[A, B]] =
    Codec.from(eitherDecoder, eitherEncoder)
}

Следующий код отлично работает:

      object SuccessCase extends App {

  import codecs.eitherCodec

  case class Cls(i: Either[String, Int])

  implicit val codec: Codec[Cls] = deriveCodec[Cls]

  val schema = implicitly[Schema[Cls]]
}

Но этот тестовый пример не работает. Обратите внимание, что единственное отличие - это псевдоним Either.

      object FailureCase extends App {

  import codecs.eitherCodec

  type EitherAlias = Either[String, Int]
  case class Cls(i: EitherAlias)

  implicit val codec: Codec[Cls] = deriveCodec[Cls]

  val schema = implicitly[Schema[Cls]]

  //Fails with error:
  //  Could not find Schema for type com.xxx.FailureCase.ClsB.
  //  Since 0.17.0 automatic derivation requires the following import: `import sttp.tapir.generic.auto._`
  //  You can find more details in the docs: https://tapir.softwaremill.com/en/latest/endpoint/customtypes.html#schema-derivation
  //  When using datatypes integration remember to import respective schemas/codecs as described in https://tapir.softwaremill.com/en/latest/endpoint/integrations.html
  //  val schema = implicitly[Schema[Cls]]

  //  (sttp.tapir.generic.auto._ is imported)
}

Есть идеи, что здесь может быть не так или как это решить?

Спасибо!

1 ответ

Использовал версию тапира 0.18.0-M15. Проблема вроде решена в версии 0.19

Другие вопросы по тегам