# 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/error/c/fidl.h>
fidl_test_error_Example_foo_ResponseInLine {
       y int64
} [packed]
fidl_test_error_Example_foo_ResponseOutOfLine {
       void void
} [packed]
fidl_test_error_Example_foo_ResponseHandles {
       void void
} [packed]
fidl_test_error_Example_foo_ResultInLine [
       responseInLine fidl_union_member[1, fidl_test_error_Example_foo_ResponseInLine]
       err fidl_union_member[2, int32]
]
fidl_test_error_Example_foo_ResultOutOfLine [
       responseOutOfLine fidl_test_error_Example_foo_ResponseOutOfLine
][varlen]
fidl_test_error_Example_foo_ResultHandles [
       response fidl_test_error_Example_foo_ResponseHandles
][varlen]


fidl_test_error_ExamplefooRequest {
       hdr fidl_message_header[6333213382893778862]
       sInLine fidl_string
       sOutOfLine fidl_aligned[stringnoz]
} [packed]
fidl_test_error_ExamplefooRequestHandles {
       void void
} [packed]
fidl_test_error_ExamplefooResponse {
       hdr fidl_message_header[6333213382893778862]
       resultInLine fidl_test_error_Example_foo_ResultInLine
       resultOutOfLine fidl_test_error_Example_foo_ResultOutOfLine
} [packed]
fidl_test_error_ExamplefooResponseHandles {
       result fidl_test_error_Example_foo_ResultHandles
} [packed]

resource zx_chan_fidl_test_error_Example_client[zx_chan]
resource zx_chan_fidl_test_error_Example_server[zx_chan]

zx_channel_create$fidl_test_error_Example(options const[0], out0 ptr[out, zx_chan_fidl_test_error_Example_client], out1 ptr[out, zx_chan_fidl_test_error_Example_server])
fdio_service_connect$fidl_test_error_Example(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_error_Example_server)
zx_channel_call$fidl_test_error_Examplefoo(handle zx_chan_fidl_test_error_Example_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fidl_test_error_ExamplefooRequest, fidl_test_error_ExamplefooRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fidl_test_error_ExamplefooResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])

