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

#include <fidl/test/handles/llcpp/fidl.h>

#include <memory>

#ifdef __Fuchsia__
void ::fidl_test_handles::wire::Handles::_CloseHandles() {
  plain_handle.reset();
  bti_handle.reset();
  channel_handle.reset();
  clock_handle.reset();
  debuglog_handle.reset();
  event_handle.reset();
  eventpair_handle.reset();
  exception_handle.reset();
  fifo_handle.reset();
  guest_handle.reset();
  interrupt_handle.reset();
  iommu_handle.reset();
  job_handle.reset();
  pager_handle.reset();
  pcidevice_handle.reset();
  pmt_handle.reset();
  port_handle.reset();
  process_handle.reset();
  profile_handle.reset();
  resource_handle.reset();
  socket_handle.reset();
  suspendtoken_handle.reset();
  thread_handle.reset();
  timer_handle.reset();
  vcpu_handle.reset();
  vmar_handle.reset();
  vmo_handle.reset();
  rights_handle.reset();
  aliased_plain_handle_field.reset();
  aliased_subtype_handle_field.reset();
  aliased_rights_handle_field.reset();
  some_protocol.reset();
  request_some_protocol.reset();
}
#endif  // __Fuchsia__

#ifdef __Fuchsia__
std::optional<::fidl::UnbindInfo> fidl::internal::WireClientImpl<
    ::fidl_test_handles::SomeProtocol>::DispatchEvent(fidl_incoming_msg_t*
                                                          msg) {
  FidlHandleInfoCloseMany(msg->handles, msg->num_handles);
  return ::fidl::UnbindInfo{::fidl::UnbindInfo::kUnexpectedMessage,
                            ZX_ERR_NOT_SUPPORTED};
}
#endif  // __Fuchsia__

#ifdef __Fuchsia__

::fidl::DispatchResult
fidl::internal::WireDispatcher<::fidl_test_handles::SomeProtocol>::TryDispatch(
    ::fidl::WireInterface<::fidl_test_handles::SomeProtocol>* impl,
    fidl_incoming_msg_t* msg, ::fidl::Transaction* txn) {
  return ::fidl::DispatchResult::kNotFound;
}

::fidl::DispatchResult
fidl::internal::WireDispatcher<::fidl_test_handles::SomeProtocol>::Dispatch(
    ::fidl::WireInterface<::fidl_test_handles::SomeProtocol>* impl,
    fidl_incoming_msg_t* msg, ::fidl::Transaction* txn) {
  FidlHandleInfoCloseMany(msg->handles, msg->num_handles);
  txn->InternalError(
      {::fidl::UnbindInfo::kUnexpectedMessage, ZX_ERR_NOT_SUPPORTED});
  return ::fidl::DispatchResult::kNotFound;
}
::fidl::DispatchResult
fidl::WireInterface<::fidl_test_handles::SomeProtocol>::dispatch_message(
    fidl_incoming_msg_t* msg, ::fidl::Transaction* txn) {
  return ::fidl::internal::WireDispatcher<
      ::fidl_test_handles::SomeProtocol>::Dispatch(this, msg, txn);
}
#endif  // __Fuchsia__

#ifdef __Fuchsia__

#endif  // __Fuchsia__
