问题标签 [scodec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
104 浏览

scala - 将 Hlist[F[A]] 转换为 F[B],其中案例类 B 与 A 对齐类型

注意:我正在学习无形,所以如果我错过任何细节,请要求澄清。

背景:

在练习 Shapeless 时,我正在为固定长度格式构建编码/解码解决方案。这个想法是每个case class都有自己的编码器/解码器,定义为HList与其属性对齐。

即使两个类共享相同的属性,它们的编码也可能不同。每个字段的描述将包含一些 (4) 值。但这在问题中并不重要。

问题:

完整代码可在此处获得:https ://github.com/atais/Fixed-Length/blob/03b395947a6b00e548ea1e76a9660e471f136565/src/main/scala/test/Main.scala

我声明了一个示例案例类及其编码器:

所以我的类型employeeEncoder很漂亮:

现在,编码器implicitly正在寻找一个FLEncoder[Employee],我希望它可以是上面的实现。

我已使用此解决方案将 TypeClasses 组合为元组:

但我得到:

如果我分别声明这些编码器,它们工作正常

问题:

所以基本上,如何使用Shapeless它会知道这Hlist是一个对齐的编码器类型case class


类似的问题在 scodec 中得到解决。如果您在此处查看演示: https ://github.com/atais/Fixed-Length/blob/03b395947a6b00e548ea1e76a9660e471f136565/src/main/scala/test/Fixed.scala

你可以做这样的转变:

但我不知道如何在我的情况下使用TransformSyntax.as

0 投票
0 回答
146 浏览

scala - 如何定义副产品编解码器的鉴别器值?

你能解释一下副产品是如何工作的吗?这是我的代码

我想我必须定义 coproduct 编解码器,ArdbData本测试所示。我还需要为我在discriminatedBy.using(). 当我开始测试它时,我突然发现.using没有使用来自的密钥。而是使用每个Discriminator实例的 ID。然后我注释掉Codec.coproduct[ArdbData]它仍然可以编译!为什么会编译?定义鉴别器价值的正确方法是什么?

0 投票
2 回答
113 浏览

scodec - Vector[N] 的编解码器,其中 N 确定向量的结尾

我正在使用 Scodec 解码 Flac 元数据。其中一个规范是有一个 Header 和一个 Block 可以一起重复多次。Header 有一个标志,指示当前的 Header/Block 组合是否是最后一个。

我已经能够解码 Header 和 Block,但是我们如何根据这个规范创建一个 Vector。

这是分解的代码

不确定 scodec 是否提供此功能。两种方法 vectorOfN 和 sizedVector 不起作用,因为它们需要在解码之前知道项目的数量。

0 投票
2 回答
115 浏览

scala - Scodec:将vectorOfN与vlong字段一起使用

我正在玩比特币区块链来学习 Scala 和一些有用的库。目前我正在尝试使用 SCodec 解码和编码块,我的问题是 vectorOfN 函数将其大小作为 Int。如何在保留完整值范围的同时使用长字段作为大小。换句话说,是否有 vectorOfLongN 函数?

这是我的代码,如果我使用 vintL 而不是 vlongL,它可以很好地编译:

您可以假设为 Blockheader 和 Transactions 实现了适当的编解码器。实际上,vlong 被用来简化这个问题,因为比特币使用自己的编解码器来处理可变大小的整数。

0 投票
1 回答
42 浏览

scodec - Scodec - 长度指定为输入的文字二进制无符号整数字符串?

在这里使用 scodec 的原始初学者。scodec 是否提供了一种将无符号十进制整数值转换为长度指定为输入的文字二进制无符号整数字符串的好方法,根据需要用零填充到指定长度?如果是这样,那会是什么?非常感谢...

示例伪代码:
{convert(unsignedDecimalIntValue = 5, bitCount = 6) => "000101"}

0 投票
1 回答
85 浏览

scala - 如何制作由前缀驱动的 Codec[Option[T]]?

我正在尝试为 PSQL COPY BINARY 格式实现编解码器。详细信息在元组部分

Int、Bool、String 字段编码为<4 byte length><var length payload>

我像这样实现它们

但是为了编码 NULL,他们在长度字段中使用 -1。

您能否建议我如何针对这种情况实施 Codec[Option[T]] ?

0 投票
1 回答
127 浏览

scala - 使用编解码器限制大小字节后如何忽略编解码器

我将为使用 TTLV 编码(标记、类型、长度、值)的 KMIP 协议创建一个模型

ttlv函数是“高级”并接受值的标记、类型和编解码器。

结果是一个Codec[Unit :: Unit :: Long :: A]. 但是,我将有一个Codec[Unit :: Unit :: Unit :: A](或Codec[A])将编解码器转换为case class只有 value的 a A。如何忽略uint32after used by limitedSizeBytes?否则,我有兴趣就更好的方法发表评论。


以下是case class示例:

更多高级功能,例如ttlvStructure

最后的编解码器:

要编码的对象示例:


解决方案

variableSizeBytesLong在这里做我想做的事:

0 投票
0 回答
41 浏览

scala - 如何在 scodec Attempt 中引发错误?

我有以下代码来解码 BitVector。如何删除异常并引发失败?

0 投票
1 回答
77 浏览

scala - 如何动态提供 N 个编解码器以将字段作为 VectorCodec 处理,用于不包含大小字节的二进制字段的记录

在解码器中考虑这个函数:

我真正需要的是dec: Vector[Decoder[A]],像这样:

处理具有非自描述字段的二进制格式。文件的前面是描述记录,从这些记录中得出字段大小,以后必须在数据记录中应用。所以我想建立一个解码器列表并应用它 N 次,其中 N 是解码器的数量。

我可以编写一个以 decodeCollect 为模型的新函数,但它需要一个隐式工厂,所以我可能必须编译 scodec 库并添加它。

有没有使用 scodec 库中存在的更简单的方法?与工厂打交道的方法还是不同的方法?

0 投票
1 回答
95 浏览

scala - 如何为 Collection Map 编写 scodec 编解码器

我有以下案例类

以下是我迄今为止尝试过的代码 -

我不知道如何为Map[String, String]. 我查看了在线文档,但它仍在 TODO 中。

知道如何编写编解码器Map[String, String]吗?