# 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/emptystruct/c/fidl.h>
fidl_test_emptystruct_EmptyInLine {
       padding int8
} [packed]
fidl_test_emptystruct_EmptyOutOfLine {
       void void
} [packed]
fidl_test_emptystruct_EmptyHandles {
       void void
} [packed]


fidl_test_emptystruct_EmptyProtocolSendRequest {
       hdr fidl_message_header[2183815705502904104]
       eInLine fidl_test_emptystruct_EmptyInLine
       eOutOfLine fidl_test_emptystruct_EmptyOutOfLine
} [packed]
fidl_test_emptystruct_EmptyProtocolSendRequestHandles {
       e fidl_test_emptystruct_EmptyHandles
} [packed]
fidl_test_emptystruct_EmptyProtocolReceiveEvent {
       hdr fidl_message_header[5025214662316626400]
       eInLine fidl_test_emptystruct_EmptyInLine
       eOutOfLine fidl_test_emptystruct_EmptyOutOfLine
} [packed]
fidl_test_emptystruct_EmptyProtocolReceiveEventHandles {
       e fidl_test_emptystruct_EmptyHandles
} [packed]
fidl_test_emptystruct_EmptyProtocolSendAndReceiveRequest {
       hdr fidl_message_header[6253929606062814577]
       eInLine fidl_test_emptystruct_EmptyInLine
       eOutOfLine fidl_test_emptystruct_EmptyOutOfLine
} [packed]
fidl_test_emptystruct_EmptyProtocolSendAndReceiveRequestHandles {
       e fidl_test_emptystruct_EmptyHandles
} [packed]
fidl_test_emptystruct_EmptyProtocolSendAndReceiveResponse {
       hdr fidl_message_header[6253929606062814577]
       eInLine fidl_test_emptystruct_EmptyInLine
       eOutOfLine fidl_test_emptystruct_EmptyOutOfLine
} [packed]
fidl_test_emptystruct_EmptyProtocolSendAndReceiveResponseHandles {
       e fidl_test_emptystruct_EmptyHandles
} [packed]

resource zx_chan_fidl_test_emptystruct_EmptyProtocol_client[zx_chan]
resource zx_chan_fidl_test_emptystruct_EmptyProtocol_server[zx_chan]

zx_channel_create$fidl_test_emptystruct_EmptyProtocol(options const[0], out0 ptr[out, zx_chan_fidl_test_emptystruct_EmptyProtocol_client], out1 ptr[out, zx_chan_fidl_test_emptystruct_EmptyProtocol_server])
fdio_service_connect$fidl_test_emptystruct_EmptyProtocol(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_emptystruct_EmptyProtocol_server)
zx_channel_write$fidl_test_emptystruct_EmptyProtocolSend(handle zx_chan_fidl_test_emptystruct_EmptyProtocol_client, options const[0], bytes ptr[in, fidl_test_emptystruct_EmptyProtocolSendRequest], num_bytes bytesize[bytes], handles ptr[in, fidl_test_emptystruct_EmptyProtocolSendRequestHandles], num_handles bytesize[handles])
zx_channel_read$fidl_test_emptystruct_EmptyProtocolReceive(handle zx_chan_fidl_test_emptystruct_EmptyProtocol_client, options const[0], bytes ptr[out, array[int8, ZX_CHANNEL_MAX_MSG_BYTES]], num_bytes bytesize[bytes], handles ptr[out, fidl_test_emptystruct_EmptyProtocolReceiveEventHandles], num_handles bytesize[handles], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fidl_test_emptystruct_EmptyProtocolSendAndReceive(handle zx_chan_fidl_test_emptystruct_EmptyProtocol_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fidl_test_emptystruct_EmptyProtocolSendAndReceiveRequest, fidl_test_emptystruct_EmptyProtocolSendAndReceiveRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fidl_test_emptystruct_EmptyProtocolSendAndReceiveResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])

