// WARNING: This file is machine generated by fidlgen_dart.
// @dart = 2.12

library fidl_fidl_test_typealiases_async;

import 'dart:async' as $async;
import 'dart:core' hide Set;
import 'dart:developer';
import 'dart:typed_data';

import 'package:fidl/fidl.dart' as $fidl;
import 'package:meta/meta.dart';
import 'package:zircon/zircon.dart' as $zircon;

import 'package:fidl_someotherlibrary/fidl_async.dart' as lib$someotherlibrary;
// ignore_for_file: always_specify_types
// ignore_for_file: avoid_positional_boolean_parameters
// ignore_for_file: avoid_returning_null
// ignore_for_file: cascade_invocations
// ignore_for_file: constant_identifier_names
// ignore_for_file: one_member_abstracts
// ignore_for_file: prefer_constructors_over_static_methods
// ignore_for_file: prefer_single_quotes
// ignore_for_file: public_member_api_docs
// ignore_for_file: unused_import
// ignore_for_file: unused_local_variable
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: library_prefixes
// ignore_for_file: prefer_typing_uninitialized_variables
// ignore_for_file: avoid_js_rounded_ints
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: always_put_required_named_parameters_first
// ignore_for_file: prefer_generic_function_type_aliases
// ignore_for_file: prefer_equal_for_default_values
// ignore_for_file: avoid_catches_without_on_clauses
// ignore_for_file: unused_shown_name
// ignore_for_file: unnecessary_lambdas
// ignore_for_file: comment_references
// ignore_for_file: avoid_unused_constructor_parameters
// ignore_for_file: prefer_interpolation_to_compose_strings

class ObjType extends $fidl.Enum {
  factory ObjType(int _v) {
    switch (_v) {
      case 0x0:
        return none;
      case 0x4:
        return channel;
      default:
        throw $fidl.FidlError('Invalid strict enum value: $_v',
            $fidl.FidlErrorCode.fidlInvalidEnumValue);
    }
  }
  static const ObjType none = ObjType._(0x0);
  static const ObjType channel = ObjType._(0x4);

  const ObjType._(this.$value);

  @override
  final int $value;

  static const Map<String, ObjType> $valuesMap = {
    r'none': none,
    r'channel': channel,
  };

  static const List<ObjType> $values = [
    none,
    channel,
  ];

  static ObjType? $valueOf(String name) => $valuesMap[name];

  @override
  bool isUnknown() {
    return false;
  }

  @override
  String toString() {
    switch ($value) {
      case 0x0:
        return r'ObjType.none';
      case 0x4:
        return r'ObjType.channel';
      default:
        return r'ObjType.' '${$value}';
    }
  }

  static ObjType _ctor(int v) => ObjType(v);
}

const $fidl.EnumType<ObjType> kobj_type_Type = $fidl.EnumType<ObjType>(
    type: $fidl.Uint32Type(),
    values: {0x0: null, 0x4: null},
    ctor: ObjType._ctor);

class ExampleOfUseOfAliases extends $fidl.Struct {
  const ExampleOfUseOfAliases({
    required this.fieldOfU32,
    required this.fieldOfVecOfStrings,
    required this.fieldOfVecOfStringsAtMostNine,
    required this.fieldOfVecOfStringsAtMost5,
    required this.fieldOfVecOfRefMeAtMost5,
    required this.fieldOfChannel,
    required this.fieldOfClientEnd,
    this.fieldOfNullableClientEnd,
  });
  ExampleOfUseOfAliases.clone(
    ExampleOfUseOfAliases $orig, {
    int? fieldOfU32,
    List<String>? fieldOfVecOfStrings,
    List<String>? fieldOfVecOfStringsAtMostNine,
    List<String>? fieldOfVecOfStringsAtMost5,
    List<lib$someotherlibrary.ReferenceMe>? fieldOfVecOfRefMeAtMost5,
    $zircon.Channel? fieldOfChannel,
    $zircon.Channel? fieldOfClientEnd,
    $zircon.Channel? fieldOfNullableClientEnd,
  }) : this(
          fieldOfU32: fieldOfU32 ?? $orig.fieldOfU32,
          fieldOfVecOfStrings: fieldOfVecOfStrings ?? $orig.fieldOfVecOfStrings,
          fieldOfVecOfStringsAtMostNine: fieldOfVecOfStringsAtMostNine ??
              $orig.fieldOfVecOfStringsAtMostNine,
          fieldOfVecOfStringsAtMost5:
              fieldOfVecOfStringsAtMost5 ?? $orig.fieldOfVecOfStringsAtMost5,
          fieldOfVecOfRefMeAtMost5:
              fieldOfVecOfRefMeAtMost5 ?? $orig.fieldOfVecOfRefMeAtMost5,
          fieldOfChannel: fieldOfChannel ?? $orig.fieldOfChannel,
          fieldOfClientEnd: fieldOfClientEnd ?? $orig.fieldOfClientEnd,
          fieldOfNullableClientEnd:
              fieldOfNullableClientEnd ?? $orig.fieldOfNullableClientEnd,
        );

  ExampleOfUseOfAliases.cloneWithout(
    ExampleOfUseOfAliases $orig, {
    bool fieldOfNullableClientEnd = false,
  }) : this(
          fieldOfU32: $orig.fieldOfU32,
          fieldOfVecOfStrings: $orig.fieldOfVecOfStrings,
          fieldOfVecOfStringsAtMostNine: $orig.fieldOfVecOfStringsAtMostNine,
          fieldOfVecOfStringsAtMost5: $orig.fieldOfVecOfStringsAtMost5,
          fieldOfVecOfRefMeAtMost5: $orig.fieldOfVecOfRefMeAtMost5,
          fieldOfChannel: $orig.fieldOfChannel,
          fieldOfClientEnd: $orig.fieldOfClientEnd,
          fieldOfNullableClientEnd:
              fieldOfNullableClientEnd ? null : $orig.fieldOfNullableClientEnd,
        );

  final int fieldOfU32;
  final List<String> fieldOfVecOfStrings;
  final List<String> fieldOfVecOfStringsAtMostNine;
  final List<String> fieldOfVecOfStringsAtMost5;
  final List<lib$someotherlibrary.ReferenceMe> fieldOfVecOfRefMeAtMost5;
  final $zircon.Channel fieldOfChannel;
  final $zircon.Channel fieldOfClientEnd;
  final $zircon.Channel? fieldOfNullableClientEnd;

  @override
  List<Object?> get $fields {
    return <Object?>[
      fieldOfU32,
      fieldOfVecOfStrings,
      fieldOfVecOfStringsAtMostNine,
      fieldOfVecOfStringsAtMost5,
      fieldOfVecOfRefMeAtMost5,
      fieldOfChannel,
      fieldOfClientEnd,
      fieldOfNullableClientEnd,
    ];
  }

  static const $fieldType0 = $fidl.Uint32Type();
  static const $fieldType1 = $fidl.VectorType<String, List<String>>(
      element: $fidl.StringType(maybeElementCount: null),
      maybeElementCount: null);
  static const $fieldType2 = $fidl.VectorType<String, List<String>>(
      element: $fidl.StringType(maybeElementCount: null), maybeElementCount: 9);
  static const $fieldType3 = $fidl.VectorType<String, List<String>>(
      element: $fidl.StringType(maybeElementCount: null), maybeElementCount: 5);
  static const $fieldType4 = $fidl.VectorType<lib$someotherlibrary.ReferenceMe,
          List<lib$someotherlibrary.ReferenceMe>>(
      element: lib$someotherlibrary.kReferenceMe_Type, maybeElementCount: 5);
  static const $fieldType5 = $fidl.ChannelType();
  static const $fieldType6 = $fidl.ChannelType();
  static const $fieldType7 = $fidl.NullableChannelType();

  @override
  void $encode($fidl.Encoder $encoder, int $offset) {
    $fieldType0.encode($encoder, fieldOfU32, $offset + 0);
    $fieldType1.encode($encoder, fieldOfVecOfStrings, $offset + 8);
    $fieldType2.encode($encoder, fieldOfVecOfStringsAtMostNine, $offset + 24);
    $fieldType3.encode($encoder, fieldOfVecOfStringsAtMost5, $offset + 40);
    $fieldType4.encode($encoder, fieldOfVecOfRefMeAtMost5, $offset + 56);
    $fieldType5.encode($encoder, fieldOfChannel, $offset + 72);
    $fieldType6.encode($encoder, fieldOfClientEnd, $offset + 76);
    $fieldType7.encode($encoder, fieldOfNullableClientEnd, $offset + 80);
  }

  @override
  String toString() {
    return r'ExampleOfUseOfAliases' r'(fieldOfU32: ' +
        fieldOfU32.toString() +
        r', fieldOfVecOfStrings: ' +
        fieldOfVecOfStrings.toString() +
        r', fieldOfVecOfStringsAtMostNine: ' +
        fieldOfVecOfStringsAtMostNine.toString() +
        r', fieldOfVecOfStringsAtMost5: ' +
        fieldOfVecOfStringsAtMost5.toString() +
        r', fieldOfVecOfRefMeAtMost5: ' +
        fieldOfVecOfRefMeAtMost5.toString() +
        r', fieldOfChannel: ' +
        fieldOfChannel.toString() +
        r', fieldOfClientEnd: ' +
        fieldOfClientEnd.toString() +
        r', fieldOfNullableClientEnd: ' +
        fieldOfNullableClientEnd.toString() +
        r')';
  }

  static ExampleOfUseOfAliases _structDecode(
      $fidl.Decoder $decoder, int $offset) {
    return ExampleOfUseOfAliases(
        fieldOfU32: $fieldType0.decode($decoder, $offset + 0),
        fieldOfVecOfStrings: $fieldType1.decode($decoder, $offset + 8),
        fieldOfVecOfStringsAtMostNine:
            $fieldType2.decode($decoder, $offset + 24),
        fieldOfVecOfStringsAtMost5: $fieldType3.decode($decoder, $offset + 40),
        fieldOfVecOfRefMeAtMost5: $fieldType4.decode($decoder, $offset + 56),
        fieldOfChannel: $fieldType5.decode($decoder, $offset + 72),
        fieldOfClientEnd: $fieldType6.decode($decoder, $offset + 76),
        fieldOfNullableClientEnd: $fieldType7.decode($decoder, $offset + 80));
  }
}

// See fxbug.dev/7644:
// ignore: recursive_compile_time_constant
const $fidl.StructType<ExampleOfUseOfAliases> kExampleOfUseOfAliases_Type =
    $fidl.StructType<ExampleOfUseOfAliases>(
  inlineSize: 88,
  structDecode: ExampleOfUseOfAliases._structDecode,
);

// ignore: unused_element, avoid_private_typedef_functions
typedef _VoidCallback = void Function();
