【问题标题】:How to convert into refined type?如何转换成精炼型?
【发布时间】:2020-06-30 03:53:54
【问题描述】:

我正在使用库 https://github.com/fthomas/refined 并希望将 java.util.UUID 转换为精炼的 Uuid
如何将java.util.UUID转换为精炼的Uuid

更新

我有以下 http 路由:

  private val httpRoutes: HttpRoutes[F] = HttpRoutes.of[F] {
    case GET -> Root / UUIDVar(id) =>
      program.read(id)

读取函数定义如下:

  def read(id: Uuid): F[User] =
    query
      .read(id)
      .flatMap {
        case Some(user) =>
          Applicative[F].pure(user)
        case None =>
          ApplicativeError[F, UserError].raiseError[User](UserNotRegistered)
      }

编译器抱怨:

type mismatch;
[error]  found   : java.util.UUID
[error]  required: eu.timepit.refined.string.Uuid
[error]       program.read(id)
[error]         

       ^

【问题讨论】:

  • Refined 的 Uuid 用于检查 String 是否包含有效的 UUID,因此如果将该字符串转换为真正的 UUID,您会很安全,为什么要这样做需要相反的吗?
  • 我已经更新了我的帖子。
  • @LuisMiguelMejíaSuárez 可能 zero_coding 更愿意保证字符串是有效的 uuid,不在数据类型 java.util.UUID 内,而是在精炼类型 String Refined Uuid 内。

标签: scala scala-cats http4s refined


【解决方案1】:

这里是将java.util.UUID 转换为eu.timepit.refined.api.Refined[String, eu.timepit.refined.string.Uuid]

import java.util.UUID    
import eu.timepit.refined.string.Uuid
import eu.timepit.refined.api.Refined

val uuid: UUID = UUID.fromString("deea44c7-a180-4898-9527-58db0ed34683")

val uuid1: String Refined Uuid = Refined.unsafeApply[String, Uuid](uuid.toString)

【讨论】:

  • 我如何使用它与UUIDVar(id)相关的示例?
  • @zero_coding 让我们从您的签名开始。 def read(id: Uuid)... 很奇怪。 eu.timepit.refined.string.Uuid 是谓词,而不是数据类型。数据类型为java.util.UUIDStringRefined[String, Uuid](又名String Refined Uuid)。你从哪里得到签名def read(id: Uuid)...?应该是def read(id: String Refined Uuid)...
  • @zero_coding 它是一种类型,但它是谓词,而不是用谓词细化的字符串。
  • @zero_coding 例如,在本教程的开头,它写成val i1: Int Refined Positive = 5。你不写val i1: Positive = 5
  • @zero_coding 所以如果正确的签名是def read(id: String Refined Uuid): F[User]那么你可以做program.read(Refined.unsafeApply[String, Uuid](id.toString))
猜你喜欢
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多