Codec
Codec<
TFrom
,TTo
> =FixedSizeCodec
<TFrom
,TTo
> |VariableSizeCodec
<TFrom
,TTo
>
一个可以将值编码为字节数组或从字节数组解码值的对象。
Codec
可以是:
- 一个 FixedSizeCodec,其中所有编码后的值都具有相同的固定大小。
- 一个 VariableSizeCodec,其中编码后的值的大小可以变化。
类型参数
类型参数 | 默认类型 |
---|---|
TFrom | - |
TTo extends TFrom | TFrom |
示例
备注
为了方便起见,codec 可以编码比它们解码的类型更宽松的类型。
也就是说,类型 TFrom 可以是类型 TTo 的超集。
例如,一个 Codec<bigint | number, bigint>
可以编码 bigint
和 number
值,但总是解码为 bigint
。
值得注意的是,codec 是编码器和解码器的联合。
这意味着一个 Codec<TFrom, TTo>
可以使用 combineCodec 函数从一个 Encoder<TFrom>
和一个 Decoder<TTo>
组合而成。
这对于希望向其用户公开所有三种类型的对象的库作者特别有用。
除了组合编码器和解码器之外,还可以使用 createCodec 函数从头开始创建 codec,但更常见的是使用 @solana/codecs
包的各种助手将多个 codec 组合在一起。
例如,下面是如何为一个包含 name
字符串和 age
数字的 Person
对象类型创建一个 Codec
:
请注意,组合的 Codec
类型非常聪明,可以理解它们是固定大小还是可变大小。
在上面的例子中,getU32Codec()
是一个固定大小的 codec,而 addCodecSizePrefix(getUtf8Codec(), getU32Codec())
是一个可变大小的 codec。
这使得最终的 Person
codec 成为一个可变大小的 codec。