// WARNING: This file is machine generated by fidlgen.

library fidl_test_name_test;

import 'dart:async' as $async;
import 'dart:core' hide Error, Future, Match, Set, Stream, Type;
import 'dart:typed_data';

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

import './fidl_async.dart';

// ignore_for_file: always_specify_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: one_member_abstracts
// ignore_for_file: public_member_api_docs
// ignore_for_file: unused_import
// ignore_for_file: library_prefixes
// ignore_for_file: unused_shown_name

class FirstProtocol$TestBase extends FirstProtocol {
  @override
  $async.Future<void> methodOnFirst() {
    return $async.Future.error(UnimplementedError());
  }
}

class SecondProtocol$TestBase extends SecondProtocol {
  @override
  $async.Future<void> methodOnSecond() {
    return $async.Future.error(UnimplementedError());
  }
}
