gpt4 book ai didi

scala - scodec 忽略 hlist 和 case 类之间的编解码器转换中的最后一个值

转载 作者:行者123 更新时间:2023-12-01 23:50:19 25 4
gpt4 key购买 nike

我刚开始使用 typelevel 的“scodec”库:https://github.com/scodec/scodec

我发现我经常使用以下函数:

/**
* When called on a `Codec[L]` for some `L <: HList`, returns a new codec that encodes/decodes
* `B :: L` but only returns `L`. HList equivalent of `~>`.
* @group hlist
*/
def :~>:[B](codec: Codec[B])(implicit ev: Unit =:= B): Codec[L] = codec.dropLeft(self)

如果我有一个我不想使用规范的每个值的案例类,这很有用:

case class Example(value1: Int, value3)
implicit val exampleCodec: Codec[Example] = (
("value1" | uint8) ::
("value2" | uint8) :~>: // decode/encode, but dont pass this in when converting from hlist to case class
("value3" | uint8)
).as[Example]

如果我要忽略的值不是 hlist 中的最后一个值,这很有效。谁知道如何更改编解码器,如果我希望我的案例类是:

case class Example(value1: Int, value2: Int)//忽略 value3

感谢任何帮助 - 谢谢!

最佳答案

你可以只使用<~ ,所以不是这个:

implicit val exampleCodec: Codec[Example] = (
("value1" | uint8) ::
("value2" | uint8).unit(0) :~>:
("value3" | uint8)
).as[Example]

你会这样写:

implicit val exampleCodec: Codec[Example] = (
("value1" | uint8) ::
("value3" | uint8) <~
("value2" | uint8).unit(0)
).as[Example]

请注意,您明确必须将编解码器设为 Codec[Unit] —我正在使用 .unit(0)这里只是为了举例。

关于scala - scodec 忽略 hlist 和 case 类之间的编解码器转换中的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26917604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com