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

#pragma once

#include <lib/fidl/llcpp/internal/transport.h>

namespace test_doccomments {

/// interface comment #1
///
/// interface comment #3
class Interface final {
  Interface() = delete;

 public:
  using Transport = ::fidl::internal::ChannelTransport;
  /// method comment #1
  ///
  /// method comment #3
  class Method final {
    Method() = delete;

   public:
    using Protocol = ::test_doccomments::Interface;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = false;
  };
  /// event comment #1
  ///
  /// event comment #3
  class OnEvent final {
    OnEvent() = delete;

   public:
    using Protocol = ::test_doccomments::Interface;
    static constexpr bool kHasRequest = false;
    static constexpr bool kHasResponse = true;
  };
};
}  // namespace test_doccomments
