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

#pragma once

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

namespace test_union {

class TestProtocol final {
  TestProtocol() = delete;

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

   public:
    using Protocol = ::test_union::TestProtocol;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = true;
  };
  class FlexibleXUnionHenceResponseMustBeHeapAllocated final {
    FlexibleXUnionHenceResponseMustBeHeapAllocated() = delete;

   public:
    using Protocol = ::test_union::TestProtocol;
    static constexpr bool kHasRequest = true;
    static constexpr bool kHasResponse = true;
  };
};
}  // namespace test_union
