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

#pragma once

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

namespace test_emptystruct {

class EmptyProtocol final {
  EmptyProtocol() = delete;

 public:
  using Transport = ::fidl::internal::ChannelTransport;
  class Send final {
    Send() = delete;

   public:
    using Protocol = ::test_emptystruct::EmptyProtocol;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = false;
  };
  class Receive final {
    Receive() = delete;

   public:
    using Protocol = ::test_emptystruct::EmptyProtocol;
    static constexpr bool kHasRequest = false;
    static constexpr bool kHasResponse = true;
  };
  class SendAndReceive final {
    SendAndReceive() = delete;

   public:
    using Protocol = ::test_emptystruct::EmptyProtocol;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = true;
  };
};
}  // namespace test_emptystruct
