// 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_drivertwoway {

class TwoWay final {
  TwoWay() = delete;

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

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

  class Add final {
    Add() = delete;

   public:
    using Protocol = ::test_drivertwoway::TwoWay;
    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_drivertwoway
namespace fidl {

template <>
struct IsProtocol<::test_drivertwoway::TwoWay> : public std::true_type {};

}  // namespace fidl
