Kit
Functions

getStructCodec

Call Signature

getStructCodec<TFields>(fields): FixedSizeCodec<DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Encoder<TFrom> ? TFrom : never }>, DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Decoder<TTo> ? TTo : never }> & DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Encoder<TFrom> ? TFrom : never }>>

Returns a codec for encoding and decoding custom objects.

This codec serializes objects by encoding and decoding each field sequentially.

Type Parameters

Type ParameterDescription
TFields extends Fields<FixedSizeCodec<any>>The fields of the struct, each paired with a codec.

Parameters

ParameterTypeDescription
fieldsTFieldsThe name and codec of each field.

Returns

FixedSizeCodec<DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Encoder<TFrom> ? TFrom : never }>, DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Decoder<TTo> ? TTo : never }> & DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Encoder<TFrom> ? TFrom : never }>>

A FixedSizeCodec or VariableSizeCodec for encoding and decoding custom objects.

Example

Encoding and decoding a custom struct.

const codec = getStructCodec([
  ['name', fixCodecSize(getUtf8Codec(), 5)],
  ['age', getU8Codec()]
]);
 
const bytes = codec.encode({ name: 'Alice', age: 42 });
// 0x416c6963652a
//   |         └── Age (42)
//   └── Name ("Alice")
 
const struct = codec.decode(bytes);
// { name: 'Alice', age: 42 }

Remarks

Separate getStructEncoder and getStructDecoder functions are available.

const bytes = getStructEncoder([
  ['name', fixCodecSize(getUtf8Encoder(), 5)],
  ['age', getU8Encoder()]
]).encode({ name: 'Alice', age: 42 });
 
const struct = getStructDecoder([
  ['name', fixCodecSize(getUtf8Decoder(), 5)],
  ['age', getU8Decoder()]
]).decode(bytes);

See

Call Signature

getStructCodec<TFields>(fields): VariableSizeCodec<DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Encoder<TFrom> ? TFrom : never }>, DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Decoder<TTo> ? TTo : never }> & DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Encoder<TFrom> ? TFrom : never }>>

Returns a codec for encoding and decoding custom objects.

This codec serializes objects by encoding and decoding each field sequentially.

Type Parameters

Type ParameterDescription
TFields extends Fields<Codec<any>>The fields of the struct, each paired with a codec.

Parameters

ParameterTypeDescription
fieldsTFieldsThe name and codec of each field.

Returns

VariableSizeCodec<DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Encoder<TFrom> ? TFrom : never }>, DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Decoder<TTo> ? TTo : never }> & DrainOuterGeneric<{ [I in never as TFields[I][0]]: TFields[I][1] extends Encoder<TFrom> ? TFrom : never }>>

A FixedSizeCodec or VariableSizeCodec for encoding and decoding custom objects.

Example

Encoding and decoding a custom struct.

const codec = getStructCodec([
  ['name', fixCodecSize(getUtf8Codec(), 5)],
  ['age', getU8Codec()]
]);
 
const bytes = codec.encode({ name: 'Alice', age: 42 });
// 0x416c6963652a
//   |         └── Age (42)
//   └── Name ("Alice")
 
const struct = codec.decode(bytes);
// { name: 'Alice', age: 42 }

Remarks

Separate getStructEncoder and getStructDecoder functions are available.

const bytes = getStructEncoder([
  ['name', fixCodecSize(getUtf8Encoder(), 5)],
  ['age', getU8Encoder()]
]).encode({ name: 'Alice', age: 42 });
 
const struct = getStructDecoder([
  ['name', fixCodecSize(getUtf8Decoder(), 5)],
  ['age', getU8Decoder()]
]).decode(bytes);

See

On this page