// typemap.test-mojom-converters.ts is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {mojo} from '//resources/mojo/mojo/public/js/bindings.js';



export class TypemappedDataView {
  private readonly decoder_: mojo.internal.Decoder;
  private readonly version_: number;
  private readonly fieldSpecs_: Array<mojo.internal.StructFieldSpec<any, any>>;

  constructor(decoder: mojo.internal.Decoder,
              version: number,
              fieldSpecs: Array<mojo.internal.StructFieldSpec<any, any>>) {
    this.decoder_ = decoder;
    this.version_ = version;
    this.fieldSpecs_ = fieldSpecs;
  }
  get field(): number {
    const field = this.fieldSpecs_[0];
    return mojo.internal.decodeStructField(this.decoder_, field!, this.version_);
  }

  get optional(): (number | null) {
    const flagField = this.fieldSpecs_[1];
    return mojo.internal.decodeStructNullableValueField(this.decoder_, flagField!, this.fieldSpecs_, this.version_);
  }

  get optionalContainer(): Array<(boolean | null)> {
    const field = this.fieldSpecs_[3];
    return mojo.internal.decodeStructField(this.decoder_, field!, this.version_);
  }
}

export interface TypemappedTypeMapper<T> {
  // Encoding:
  field(mappedTyped: T): number;
  optional(mappedTyped: T): (number | null);
  optionalContainer(mappedTyped: T): Array<(boolean | null)>;

  // Decoding:
  convert(dataView: TypemappedDataView): T;
}

