getPredicateEncoder

function getPredicateEncoder<TFrom, TIfTrue, TIfFalse>(
    predicate,
    ifTrue,
    ifFalse,
): GetUnionEncoderType<readonly [TIfTrue, TIfFalse]>;

Returns an encoder that selects between two encoders based on a predicate.

This encoder uses a boolean predicate function to determine which of two encoders to use for a given value. If the predicate returns true, the ifTrue encoder is used; otherwise, the ifFalse encoder is used.

Type Parameters

Type ParameterDefault typeDescription
TFromanyThe type of the value to encode.
TIfTrue extends Encoder<TFrom>Encoder<TFrom>-
TIfFalse extends Encoder<TFrom>Encoder<TFrom>-

Parameters

ParameterTypeDescription
predicate(value) => booleanA function that returns true or false for a given value.
ifTrueTIfTrueThe encoder to use when the predicate returns true.
ifFalseSameType<TIfTrue extends Encoder<TFrom> ? TFrom : never, TIfFalse extends Encoder<TFrom> ? TFrom : never> & TIfFalseThe encoder to use when the predicate returns false.

Returns

GetUnionEncoderType<readonly [TIfTrue, TIfFalse]>

An Encoder based on the provided encoders.

Example

Encoding small and large numbers differently.

const encoder = getPredicateEncoder(
  (n: number) => n < 256,
  getU8Encoder(),
  getU32Encoder()
);
 
encoder.encode(42);
// 0x2a
//   └── Small number encoded as u8
 
encoder.encode(1000);
// 0xe8030000
//   └── Large number encoded as u32

See

getPredicateCodec

On this page