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

#pragma once

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

namespace test_service {

class SecondProtocol final {
  SecondProtocol() = delete;

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

   public:
    using Protocol = ::test_service::SecondProtocol;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = false;
  };
};

class FirstProtocol final {
  FirstProtocol() = delete;

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

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