首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类型别名的类中隐式获取Schema

从类型别名的类中隐式获取Schema
EN

Stack Overflow用户
提问于 2021-10-12 10:01:47
回答 1查看 276关注 0票数 0

目前,我正在使用sttp版本3.3.14tapir版本0.18.0-M15,并且在某些案例类的模式上遇到了问题。更具体地说,包含类型别名的case类。

以下是一个简单的自定义代码:

代码语言:javascript
复制
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)
}

下面的代码工作得很好:

代码语言:javascript
复制
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]]
}

但是这个测试用例失败了。注意,唯一的区别是要么别名。

代码语言:javascript
复制
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.Cls.
  //  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)
}

对这里可能出了什么问题或如何解决这个问题有什么想法吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 08:57:48

正在使用tapir版本的0.18.0-M150.19版本似乎已经解决了问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69538583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档