【问题标题】:Using nested case classes with scodec使用带有 scodec 的嵌套案例类
【发布时间】:2015-04-12 03:31:05
【问题描述】:

使用 scodec 定义消息时,我想使用嵌套的案例类。例如:

case class Foo(x: Int, y: Int)
object Foo {
  def baseCodec = uint16 :: uint16
  def codec = baseCodec.as[Foo]
}

case class Bar(a: Int, foo: Foo, b: Int)
object Bar {
  val baseCodec = uint8 :: Foo.baseCodec :: uint16
  val codec = baseCodec.as[Bar]
}

但是,在尝试编译时,我得到以下信息:

 error: Could not prove that shapeless.::[Int,shapeless.::[shapeless.::[Int,shapeless.::[Int,shapeless.HNil]],shapeless.::[Int,shapeless.HNil]]] can be converted to/from Bar.
         val codec = baseCodec.as[Bar]
                                 ^

有没有办法做到这一点? (在我的真实代码中,嵌套案例类有时出现在包含类的参数列表的开头,有时在中间,有时在末尾)。

【问题讨论】:

    标签: scodec


    【解决方案1】:

    我想通了。您需要使用编解码器,而不是 HList。这有效:

    object Bar {
      //Foo.codec instead of Foo.baseCodec
      val baseCodec = uint8 :: Foo.codec :: uint16
      val codec = baseCodec.as[Bar]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 2015-10-16
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      相关资源
      最近更新 更多