# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#
# WARNING: This file is machine generated by fidlgen.

include <fidl/test/handles/c/fidl.h>
fidl_test_handles_obj_type = fidl_test_handles_obj_type_NONE, fidl_test_handles_obj_type_PROCESS, fidl_test_handles_obj_type_THREAD, fidl_test_handles_obj_type_VMO, fidl_test_handles_obj_type_CHANNEL, fidl_test_handles_obj_type_EVENT, fidl_test_handles_obj_type_PORT, fidl_test_handles_obj_type_INTERRUPT, fidl_test_handles_obj_type_PCI_DEVICE, fidl_test_handles_obj_type_LOG, fidl_test_handles_obj_type_SOCKET, fidl_test_handles_obj_type_RESOURCE, fidl_test_handles_obj_type_EVENTPAIR, fidl_test_handles_obj_type_JOB, fidl_test_handles_obj_type_VMAR, fidl_test_handles_obj_type_FIFO, fidl_test_handles_obj_type_GUEST, fidl_test_handles_obj_type_VCPU, fidl_test_handles_obj_type_TIMER, fidl_test_handles_obj_type_IOMMU, fidl_test_handles_obj_type_BTI, fidl_test_handles_obj_type_PROFILE, fidl_test_handles_obj_type_PMT, fidl_test_handles_obj_type_SUSPEND_TOKEN, fidl_test_handles_obj_type_PAGER, fidl_test_handles_obj_type_EXCEPTION, fidl_test_handles_obj_type_CLOCK, fidl_test_handles_obj_type_STREAM, fidl_test_handles_obj_type_MSI_ALLOCATION, fidl_test_handles_obj_type_MSI_INTERRUPT
fidl_test_handles_HandlesInLine {
       plain_handle flags[fidl_handle_presence, int32]
       bti_handle flags[fidl_handle_presence, int32]
       channel_handle flags[fidl_handle_presence, int32]
       clock_handle flags[fidl_handle_presence, int32]
       debuglog_handle flags[fidl_handle_presence, int32]
       event_handle flags[fidl_handle_presence, int32]
       eventpair_handle flags[fidl_handle_presence, int32]
       exception_handle flags[fidl_handle_presence, int32]
       fifo_handle flags[fidl_handle_presence, int32]
       guest_handle flags[fidl_handle_presence, int32]
       interrupt_handle flags[fidl_handle_presence, int32]
       iommu_handle flags[fidl_handle_presence, int32]
       job_handle flags[fidl_handle_presence, int32]
       pager_handle flags[fidl_handle_presence, int32]
       pcidevice_handle flags[fidl_handle_presence, int32]
       pmt_handle flags[fidl_handle_presence, int32]
       port_handle flags[fidl_handle_presence, int32]
       process_handle flags[fidl_handle_presence, int32]
       profile_handle flags[fidl_handle_presence, int32]
       resource_handle flags[fidl_handle_presence, int32]
       socket_handle flags[fidl_handle_presence, int32]
       suspendtoken_handle flags[fidl_handle_presence, int32]
       thread_handle flags[fidl_handle_presence, int32]
       timer_handle flags[fidl_handle_presence, int32]
       vcpu_handle flags[fidl_handle_presence, int32]
       vmar_handle flags[fidl_handle_presence, int32]
       vmo_handle flags[fidl_handle_presence, int32]
       rights_handle flags[fidl_handle_presence, int32]
       aliased_plain_handle_field flags[fidl_handle_presence, int32]
       aliased_subtype_handle_field flags[fidl_handle_presence, int32]
       aliased_rights_handle_field flags[fidl_handle_presence, int32]
       some_protocol flags[fidl_handle_presence, int32]
       request_some_protocol flags[fidl_handle_presence, int32]
} [packed]
fidl_test_handles_HandlesOutOfLine {
       void void
} [packed]
fidl_test_handles_HandlesHandles {
       plain_handle zx_handle
       bti_handle zx_bti
       channel_handle zx_chan
       clock_handle zx_clock
       debuglog_handle zx_log
       event_handle zx_event
       eventpair_handle zx_eventpair
       exception_handle zx_exception
       fifo_handle zx_fifo
       guest_handle zx_guest
       interrupt_handle zx_interrupt
       iommu_handle zx_iommu
       job_handle zx_job
       pager_handle zx_pager
       pcidevice_handle zx_pcidevice
       pmt_handle zx_pmt
       port_handle zx_port
       process_handle zx_process
       profile_handle zx_profile
       resource_handle zx_resource
       socket_handle zx_socket
       suspendtoken_handle zx_suspendtoken
       thread_handle zx_thread
       timer_handle zx_timer
       vcpu_handle zx_vcpu
       vmar_handle zx_vmar
       vmo_handle zx_vmo
       rights_handle zx_vmo
       aliased_plain_handle_field zx_handle
       aliased_subtype_handle_field zx_vmo
       aliased_rights_handle_field zx_vmo
       some_protocol zx_chan_fidl_test_handles_SomeProtocol_client
       request_some_protocol zx_chan_fidl_test_handles_SomeProtocol_server
} [packed]



resource zx_chan_fidl_test_handles_SomeProtocol_client[zx_chan]
resource zx_chan_fidl_test_handles_SomeProtocol_server[zx_chan]

zx_channel_create$fidl_test_handles_SomeProtocol(options const[0], out0 ptr[out, zx_chan_fidl_test_handles_SomeProtocol_client], out1 ptr[out, zx_chan_fidl_test_handles_SomeProtocol_server])
fdio_service_connect$fidl_test_handles_SomeProtocol(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_handles_SomeProtocol_server)

