// Copyright 2019 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.

#ifndef EXAMPLES_DIAGNOSTICS_INSPECT_CPP_ECHO_CONNECTION_H_
#define EXAMPLES_DIAGNOSTICS_INSPECT_CPP_ECHO_CONNECTION_H_

#include <fidl/fidl.examples.routing.echo/cpp/fidl.h>
#include <lib/inspect/cpp/inspect.h>

namespace example {

struct EchoConnectionStats {
  inspect::UintProperty bytes_processed;
  inspect::UintProperty total_requests;
};

class EchoConnection : public fidl::Server<fidl_examples_routing_echo::Echo> {
 public:
  explicit EchoConnection(std::weak_ptr<EchoConnectionStats> stats);
  void EchoString(EchoStringRequest& request, EchoStringCompleter::Sync& completer) override;

 private:
  EchoConnection(const EchoConnection&) = delete;
  EchoConnection& operator=(const EchoConnection&) = delete;
  std::weak_ptr<EchoConnectionStats> stats_;
};

}  // namespace example

#endif  // EXAMPLES_DIAGNOSTICS_INSPECT_CPP_ECHO_CONNECTION_H_
