import type { BitPackerSchema, PackingContext, PackingStrategy, } from "@suaveplan/bitpacker"; import { isOptionalSchema } from "@suaveplan/bitpacker"; export class OptionalPackingStrategy implements PackingStrategy { canHandle(schema: BitPackerSchema): boolean { return isOptionalSchema(schema); } pack( data: unknown, schema: BitPackerSchema, context: PackingContext ): void { const { _optional: inner } = schema as { _optional: BitPackerSchema }; const present = data !== undefined && data !== null; context.writer.writeBool(present); if (present) { context.packValue(data, inner); } } unpack(schema: BitPackerSchema, context: PackingContext): unknown { const { _optional: inner } = schema as { _optional: BitPackerSchema }; const present = context.reader.readBool(); if (!present) { return undefined; } return context.unpackValue(inner); } }