/** * @license * Copyright 2022-2026 Matter.js Authors * SPDX-License-Identifier: Apache-2.0 */ import { TlvTag, TlvTypeLength } from "./TlvCodec.js"; import { TlvEncodingOptions, TlvReader, TlvSchema, TlvWriter } from "./TlvSchema.js"; export class TlvWrapper extends TlvSchema { constructor( protected readonly underlyingSchema: TlvSchema, protected readonly wrap: (object: O) => T, private readonly unwrap: (value: T) => O, ) { super(); } /** @deprecated Part of old ClusterType() compat layer. */ override get element(): TlvSchema.Element | undefined { return this.underlyingSchema.element; } override decodeTlvInternalValue(reader: TlvReader, typeLength: TlvTypeLength): O { return this.unwrap(this.underlyingSchema.decodeTlvInternalValue(reader, typeLength)); } override encodeTlvInternal(writer: TlvWriter, value: O, tag?: TlvTag, options?: TlvEncodingOptions): void { this.underlyingSchema.encodeTlvInternal(writer, this.wrap(value), tag, options); } override validate(value: O): void { this.underlyingSchema.validate(this.wrap(value)); } }