lazy-phones-fail
Consolidated getNullableCodec
and getOptionCodec
with their Zeroable
counterparts and added more configurations
Namely, the prefix
option can now be set to null
and the fixed
option was replaced with the noneValue
option which can be set to "zeroes"
for Zeroable
codecs or a custom byte array for custom representations of none values. This means the getZeroableNullableCodec
and getZeroableOptionCodec
functions were removed in favor of the new options.
// Before.
getZeroableNullableCodec(getU16Codec());
// After.
getNullableCodec(getU16Codec(), { noneValue: 'zeroes', prefix: null });
Additionally, it is now possible to create nullable codecs that have no prefix
nor noneValue
. In this case, the existence of the nullable item is indicated by the presence of any remaining bytes left to decode.
const codec = getNullableCodec(getU16Codec(), { prefix: null });
codec.encode(42); // 0x2a00
codec.encode(null); // Encodes nothing.
codec.decode(new Uint8Array([42, 0])); // 42
codec.decode(new Uint8Array([])); // null
Also note that it is now possible for custom noneValue
byte arrays to be of any length — previously, it had to match the fixed-size of the nullable item.
Here is a recap of all supported scenarios, using a u16
codec as an example:
encode(42) / encode(null) | No noneValue (default) | noneValue: "zeroes" | Custom noneValue (0xff ) |
---|---|---|---|
u8 prefix (default) | 0x012a00 / 0x00 | 0x012a00 / 0x000000 | 0x012a00 / 0x00ff |
Custom prefix (u16 ) | 0x01002a00 / 0x0000 | 0x01002a00 / 0x00000000 | 0x01002a00 / 0x0000ff |
No prefix | 0x2a00 / 0x | 0x2a00 / 0x0000 | 0x2a00 / 0xff |
Reciprocal changes were made with getOptionCodec
.