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

#pragma once

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

namespace test_protocolrequest {

class Parent final {
  Parent() = delete;

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

   public:
    using Protocol = ::test_protocolrequest::Parent;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = true;
  };
  class GetChildRequest final {
    GetChildRequest() = delete;

   public:
    using Protocol = ::test_protocolrequest::Parent;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = true;
  };
  class TakeChild final {
    TakeChild() = delete;

   public:
    using Protocol = ::test_protocolrequest::Parent;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = false;
  };
  class TakeChildRequest final {
    TakeChildRequest() = delete;

   public:
    using Protocol = ::test_protocolrequest::Parent;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = false;
  };
};

class Child final {
  Child() = delete;

 public:
  using Transport = ::fidl::internal::ChannelTransport;
};
}  // namespace test_protocolrequest
