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

// fidl_experiment = output_index_json

#pragma once

#include <lib/fidl/cpp/wire/internal/transport.h>
#include <lib/fidl/cpp/wire/unknown_interactions.h>

namespace test_inheritance {

class Super final {
  Super() = delete;

 public:
  using Transport = ::fidl::internal::ChannelTransport;

  static constexpr ::fidl::internal::Openness kOpenness = ::fidl::internal::Openness::kClosed;

  class Foo final {
    Foo() = delete;

   public:
    using Protocol = ::test_inheritance::Super;
    static constexpr bool kHasClientToServer = true;
    static constexpr bool kHasClientToServerBody = true;
    static constexpr bool kHasServerToClient = true;
    static constexpr bool kHasServerToClientBody = true;

    static constexpr bool kHasNonEmptyUserFacingResponse = true;
    static constexpr bool kHasDomainError = false;
    static constexpr bool kHasFrameworkError = false;
  };
};

class Sub final {
  Sub() = delete;

 public:
  using Transport = ::fidl::internal::ChannelTransport;

  static constexpr ::fidl::internal::Openness kOpenness = ::fidl::internal::Openness::kClosed;

  class Foo final {
    Foo() = delete;

   public:
    using Protocol = ::test_inheritance::Sub;
    static constexpr bool kHasClientToServer = true;
    static constexpr bool kHasClientToServerBody = true;
    static constexpr bool kHasServerToClient = true;
    static constexpr bool kHasServerToClientBody = true;

    static constexpr bool kHasNonEmptyUserFacingResponse = true;
    static constexpr bool kHasDomainError = false;
    static constexpr bool kHasFrameworkError = false;
  };
};

}  // namespace test_inheritance
namespace fidl {

template <>
struct IsProtocol<::test_inheritance::Super> : public std::true_type {};

template <>
struct IsProtocol<::test_inheritance::Sub> : public std::true_type {};

}  // namespace fidl
