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

Scala scodec忽略hlist和case类之间编解码器转换中的最后一个值,scala,scodec,Scala,Scodec,我刚开始使用typelevel的“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: C

我刚开始使用typelevel的“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)
如果我想忽略的值不是hlist中的最后一个值,那么这种方法很有效。如果我希望我的案例类是:

案例类示例(value1:Int,value2:Int)//忽略value3


感谢您的帮助-谢谢

你可以用
啊,太好了!我想只需要寻找dropRight——谢谢。除了上面的技术,您可以将单位值保留在HList中,并在绑定到case类之前删除它们。也就是说,使用::贯穿,然后使用.dropUnits.as。
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]
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]