KIT

combineCodec

调用签名

combineCodec<TFrom, TTo, TSize>(encoder, decoder): FixedSizeCodec<TFrom, TTo, TSize>

将一个 Encoder 和一个 Decoder 合并为一个 Codec

也就是说,给定一个 Encoder<TFrom> 和一个 Decoder<TTo>,此函数返回一个 Codec<TFrom, TTo>

这允许通过保持编码和解码逻辑分离来进行模块化组合,同时仍然提供一种将它们捆绑到单个 Codec 中的便捷方法。 这对于希望分别公开 EncodersDecodersCodecs 的库维护者特别有用,从而能够对未使用的逻辑进行 tree-shaking。

提供的 EncoderDecoder 必须在以下方面兼容:

  • 固定大小: 如果两者都是固定大小,它们必须具有相同的 fixedSize 值。
  • 可变大小: 如果任何一个具有 maxSize 属性,则它必须与另一个匹配。

如果未满足这些条件,将抛出一个 SolanaError

类型参数

类型参数描述
TFrom要编码的值的类型。
TTo解码后的值的类型。
TSize extends number编码后的值的固定大小(以字节为单位)(对于固定大小的编解码器)。

参数

参数类型描述
encoderFixedSizeEncoder<TFrom, TSize>要组合的 Encoder
decoderFixedSizeDecoder<TTo, TSize>要组合的 Decoder

返回

FixedSizeCodec<TFrom, TTo, TSize>

一个 Codec,提供 encodedecode 方法。

抛出

  • SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH 如果编码器和解码器具有不匹配的大小类型(固定与可变),则抛出。
  • SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH 如果两者都是固定大小,但具有不同的 fixedSize 值,则抛出。
  • SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH 如果 maxSize 属性不匹配,则抛出。

示例

从编码器和解码器创建一个固定大小的 Codec

const encoder = getU32Encoder();
const decoder = getU32Decoder();
const codec = combineCodec(encoder, decoder);
 
const bytes = codec.encode(42); // 0x2a000000
const value = codec.decode(bytes); // 42

从编码器和解码器创建一个可变大小的 Codec

const encoder = addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder());
const decoder = addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder());
const codec = combineCodec(encoder, decoder);
 
const bytes = codec.encode("hello"); // 0x0500000068656c6c6f
const value = codec.decode(bytes); // "hello"

备注

在库中定义编解码器的推荐模式是为编码器、解码器和编解码器公开单独的函数。 这允许用户仅导入他们需要的内容,从而提高 tree-shaking 效率。

type MyType = /* ... */;
const getMyTypeEncoder = (): Encoder<MyType> => { /* ... */ };
const getMyTypeDecoder = (): Decoder<MyType> => { /* ... */ };
const getMyTypeCodec = (): Codec<MyType> =>
    combineCodec(getMyTypeEncoder(), getMyTypeDecoder());

参见

调用签名

combineCodec<TFrom, TTo>(encoder, decoder): VariableSizeCodec<TFrom, TTo>

将一个 Encoder 和一个 Decoder 合并为一个 Codec

也就是说,给定一个 Encoder<TFrom> 和一个 Decoder<TTo>,此函数返回一个 Codec<TFrom, TTo>

这允许通过保持编码和解码逻辑分离来进行模块化组合,同时仍然提供一种将它们捆绑到单个 Codec 中的便捷方法。 这对于希望分别公开 EncodersDecodersCodecs 的库维护者特别有用,从而能够对未使用的逻辑进行 tree-shaking。

提供的 EncoderDecoder 必须在以下方面兼容:

  • 固定大小: 如果两者都是固定大小,它们必须具有相同的 fixedSize 值。
  • 可变大小: 如果任何一个具有 maxSize 属性,则它必须与另一个匹配。

如果未满足这些条件,将抛出一个 SolanaError

类型参数

类型参数描述
TFrom要编码的值的类型。
TTo解码后的值的类型。

参数

参数类型描述
encoderVariableSizeEncoder<TFrom>要组合的 Encoder
decoderVariableSizeDecoder<TTo>要组合的 Decoder

返回

VariableSizeCodec<TFrom, TTo>

一个 Codec,提供 encodedecode 方法。

抛出

  • SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH 如果编码器和解码器具有不匹配的大小类型(固定与可变),则抛出。
  • SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH 如果两者都是固定大小,但具有不同的 fixedSize 值,则抛出。
  • SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH 如果 maxSize 属性不匹配,则抛出。

示例

从编码器和解码器创建一个固定大小的 Codec

const encoder = getU32Encoder();
const decoder = getU32Decoder();
const codec = combineCodec(encoder, decoder);
 
const bytes = codec.encode(42); // 0x2a000000
const value = codec.decode(bytes); // 42

从编码器和解码器创建一个可变大小的 Codec

const encoder = addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder());
const decoder = addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder());
const codec = combineCodec(encoder, decoder);
 
const bytes = codec.encode("hello"); // 0x0500000068656c6c6f
const value = codec.decode(bytes); // "hello"

备注

在库中定义编解码器的推荐模式是为编码器、解码器和编解码器公开单独的函数。 这允许用户仅导入他们需要的内容,从而提高 tree-shaking 效率。

type MyType = /* ... */;
const getMyTypeEncoder = (): Encoder<MyType> => { /* ... */ };
const getMyTypeDecoder = (): Decoder<MyType> => { /* ... */ };
const getMyTypeCodec = (): Codec<MyType> =>
    combineCodec(getMyTypeEncoder(), getMyTypeDecoder());

参见

调用签名

combineCodec<TFrom, TTo>(encoder, decoder): Codec<TFrom, TTo>

将一个 Encoder 和一个 Decoder 合并为一个 Codec

也就是说,给定一个 Encoder<TFrom> 和一个 Decoder<TTo>,此函数返回一个 Codec<TFrom, TTo>

这允许通过保持编码和解码逻辑分离来进行模块化组合,同时仍然提供一种将它们捆绑到单个 Codec 中的便捷方法。 这对于希望分别公开 EncodersDecodersCodecs 的库维护者特别有用,从而能够对未使用的逻辑进行 tree-shaking。

提供的 EncoderDecoder 必须在以下方面兼容:

  • 固定大小: 如果两者都是固定大小,它们必须具有相同的 fixedSize 值。
  • 可变大小: 如果任何一个具有 maxSize 属性,则它必须与另一个匹配。

如果未满足这些条件,将抛出一个 SolanaError

类型参数

类型参数描述
TFrom要编码的值的类型。
TTo解码后的值的类型。

参数

参数类型描述
encoderEncoder<TFrom>要组合的 Encoder
decoderDecoder<TTo>要组合的 Decoder

返回

Codec<TFrom, TTo>

一个 Codec,提供 encodedecode 方法。

抛出

  • SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH 如果编码器和解码器具有不匹配的大小类型(固定与可变),则抛出。
  • SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH 如果两者都是固定大小,但具有不同的 fixedSize 值,则抛出。
  • SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH 如果 maxSize 属性不匹配,则抛出。

示例

从编码器和解码器创建一个固定大小的 Codec

const encoder = getU32Encoder();
const decoder = getU32Decoder();
const codec = combineCodec(encoder, decoder);
 
const bytes = codec.encode(42); // 0x2a000000
const value = codec.decode(bytes); // 42

从编码器和解码器创建一个可变大小的 Codec

const encoder = addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder());
const decoder = addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder());
const codec = combineCodec(encoder, decoder);
 
const bytes = codec.encode("hello"); // 0x0500000068656c6c6f
const value = codec.decode(bytes); // "hello"

备注

在库中定义编解码器的推荐模式是为编码器、解码器和编解码器公开单独的函数。 这允许用户仅导入他们需要的内容,从而提高 tree-shaking 效率。

type MyType = /* ... */;
const getMyTypeEncoder = (): Encoder<MyType> => { /* ... */ };
const getMyTypeDecoder = (): Decoder<MyType> => { /* ... */ };
const getMyTypeCodec = (): Codec<MyType> =>
    combineCodec(getMyTypeEncoder(), getMyTypeDecoder());

参见

On this page