// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';

import 'package:fidl/fidl.dart';
import 'package:fidl_fidl_examples_echo/fidl_async.dart' as fidl_echo;
import 'package:fuchsia_services/services.dart';

bool _quiet = false;

class _EchoImpl extends fidl_echo.Echo {
  final _binding = fidl_echo.EchoBinding();

  void bind(InterfaceRequest<fidl_echo.Echo> request) {
    _binding.bind(this, request);
  }

  @override
  Future<String> echoString(String value) async {
    if (!_quiet) {
      print('EchoString: $value');
    }
    return value;
  }
}

void main(List<String> args) {
  _quiet = args.contains('-q');

  final context = StartupContext.fromStartupInfo();
  final echo = _EchoImpl();

  context.outgoing.addPublicService<fidl_echo.Echo>(
      echo.bind, fidl_echo.Echo.$serviceName);
}
