import {uint32Decoder} from '../../coder/uint32/uint32-decoder.js'; import {uint32Encoder} from '../../coder/uint32/uint32-encoder.js'; import {IncompatibleLiteralError} from '../../error/incompatible-literal-error.js'; import type {Decoding} from '../../type/decoding.js'; import type {Encoding} from '../../type/encoding.js'; import {isNumber} from '../../util/guard/is-number.js'; import {isUint32} from '../../util/guard/is-uint32.js'; import {ValueTransformer} from '../value/value-transformer.js'; /** * @see {@link asUint32} alias. */ export class Uint32Transformer extends ValueTransformer { public constructor() { super(); } public override compatibleWith(data: unknown): data is number { return isNumber(data) && isUint32(data); } public decoder(): Decoding { return uint32Decoder(); } public encoder(data: number): Encoding { console.assert(isNumber(data)); return uint32Encoder(data); } public fromLiteral(literal: unknown): number { if (!isNumber(literal) || !isUint32(literal)) { throw new IncompatibleLiteralError(); } return literal; } public override toLiteral(data: number): unknown { console.assert(isNumber(data) && isUint32(data)); return data; } }