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

class SomeProtocol final {
  SomeProtocol() = delete;

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

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

class DriverProtocol final {
  DriverProtocol() = delete;

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

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

}  // namespace test_handles
namespace fidl {

template <>
struct IsProtocol<::test_handles::SomeProtocol> : public std::true_type {};

template <>
struct IsProtocol<::test_handles::DriverProtocol> : public std::true_type {};

}  // namespace fidl
