import * as BufferLayout from "@solana/buffer-layout"; import { Field } from "./Field"; export class Optional extends Field { private readonly delegate: Field; private constructor(field: Field) { super(field.span + 1, field.property); this.delegate = field; } public static of(field: Field): Optional { return new Optional(field); } public decode(b: Uint8Array, offset?: number): T | undefined { const flag = BufferLayout.u8().decode(b, offset); if (!flag) { return undefined; } return this.delegate.decode(b, (offset || 0) + 1); } }