# 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/protocolrequest/c/fidl.h>



resource zx_chan_fidl_test_protocolrequest_Child_client[zx_chan]
resource zx_chan_fidl_test_protocolrequest_Child_server[zx_chan]

zx_channel_create$fidl_test_protocolrequest_Child(options const[0], out0 ptr[out, zx_chan_fidl_test_protocolrequest_Child_client], out1 ptr[out, zx_chan_fidl_test_protocolrequest_Child_server])
fdio_service_connect$fidl_test_protocolrequest_Child(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_protocolrequest_Child_server)


fidl_test_protocolrequest_ParentGetChildRequest {
       hdr fidl_message_header[7929845654914578302]
} [packed]
fidl_test_protocolrequest_ParentGetChildRequestHandles {
       void void
} [packed]
fidl_test_protocolrequest_ParentGetChildResponse {
       hdr fidl_message_header[7929845654914578302]
       c flags[fidl_handle_presence, int32]
} [packed]
fidl_test_protocolrequest_ParentGetChildResponseHandles {
       c zx_chan_fidl_test_protocolrequest_Child_client
} [packed]
fidl_test_protocolrequest_ParentGetChildRequestRequest {
       hdr fidl_message_header[1819029190665166744]
} [packed]
fidl_test_protocolrequest_ParentGetChildRequestRequestHandles {
       void void
} [packed]
fidl_test_protocolrequest_ParentGetChildRequestResponse {
       hdr fidl_message_header[1819029190665166744]
       r flags[fidl_handle_presence, int32]
} [packed]
fidl_test_protocolrequest_ParentGetChildRequestResponseHandles {
       r zx_chan_fidl_test_protocolrequest_Child_server
} [packed]
fidl_test_protocolrequest_ParentTakeChildRequest {
       hdr fidl_message_header[374110854839013230]
       c flags[fidl_handle_presence, int32]
} [packed]
fidl_test_protocolrequest_ParentTakeChildRequestHandles {
       c zx_chan_fidl_test_protocolrequest_Child_client
} [packed]
fidl_test_protocolrequest_ParentTakeChildRequestRequest {
       hdr fidl_message_header[1574820689302890956]
       r flags[fidl_handle_presence, int32]
} [packed]
fidl_test_protocolrequest_ParentTakeChildRequestRequestHandles {
       r zx_chan_fidl_test_protocolrequest_Child_server
} [packed]

resource zx_chan_fidl_test_protocolrequest_Parent_client[zx_chan]
resource zx_chan_fidl_test_protocolrequest_Parent_server[zx_chan]

zx_channel_create$fidl_test_protocolrequest_Parent(options const[0], out0 ptr[out, zx_chan_fidl_test_protocolrequest_Parent_client], out1 ptr[out, zx_chan_fidl_test_protocolrequest_Parent_server])
fdio_service_connect$fidl_test_protocolrequest_Parent(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_protocolrequest_Parent_server)
zx_channel_call$fidl_test_protocolrequest_ParentGetChild(handle zx_chan_fidl_test_protocolrequest_Parent_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fidl_test_protocolrequest_ParentGetChildRequest, fidl_test_protocolrequest_ParentGetChildRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fidl_test_protocolrequest_ParentGetChildResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fidl_test_protocolrequest_ParentGetChildRequest(handle zx_chan_fidl_test_protocolrequest_Parent_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fidl_test_protocolrequest_ParentGetChildRequestRequest, fidl_test_protocolrequest_ParentGetChildRequestRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fidl_test_protocolrequest_ParentGetChildRequestResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_write$fidl_test_protocolrequest_ParentTakeChild(handle zx_chan_fidl_test_protocolrequest_Parent_client, options const[0], bytes ptr[in, fidl_test_protocolrequest_ParentTakeChildRequest], num_bytes bytesize[bytes], handles ptr[in, fidl_test_protocolrequest_ParentTakeChildRequestHandles], num_handles bytesize[handles])
zx_channel_write$fidl_test_protocolrequest_ParentTakeChildRequest(handle zx_chan_fidl_test_protocolrequest_Parent_client, options const[0], bytes ptr[in, fidl_test_protocolrequest_ParentTakeChildRequestRequest], num_bytes bytesize[bytes], handles ptr[in, fidl_test_protocolrequest_ParentTakeChildRequestRequestHandles], num_handles bytesize[handles])

