# 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/placementofattributes/c/fidl.h>
fidl_test_placementofattributes_ExampleEnum = fidl_test_placementofattributes_ExampleEnum_MEMBER
fidl_test_placementofattributes_ExampleBits = fidl_test_placementofattributes_ExampleBits_MEMBER
fidl_test_placementofattributes_ExampleStructInLine {
       member int32
} [packed]
fidl_test_placementofattributes_ExampleStructOutOfLine {
       void void
} [packed]
fidl_test_placementofattributes_ExampleStructHandles {
       void void
} [packed]
fidl_test_placementofattributes_ExampleUnionInLine [
       variant fidl_union_member[1, int32]
]
fidl_test_placementofattributes_ExampleUnionOutOfLine [
       void void
][varlen]
fidl_test_placementofattributes_ExampleUnionHandles [
       void void
][varlen]
fidl_test_placementofattributes_ExampleXUnionInLine [
       variant fidl_union_member[1, int32]
]
fidl_test_placementofattributes_ExampleXUnionOutOfLine [
       void void
][varlen]
fidl_test_placementofattributes_ExampleXUnionHandles [
       void void
][varlen]


fidl_test_placementofattributes_ExampleProtocolMethodRequest {
       hdr fidl_message_header[2341079615635566980]
       argInLine exampleusing_EmptyInLine
       argOutOfLine exampleusing_EmptyOutOfLine
} [packed]
fidl_test_placementofattributes_ExampleProtocolMethodRequestHandles {
       arg exampleusing_EmptyHandles
} [packed]

resource zx_chan_fidl_test_placementofattributes_ExampleProtocol_client[zx_chan]
resource zx_chan_fidl_test_placementofattributes_ExampleProtocol_server[zx_chan]

zx_channel_create$fidl_test_placementofattributes_ExampleProtocol(options const[0], out0 ptr[out, zx_chan_fidl_test_placementofattributes_ExampleProtocol_client], out1 ptr[out, zx_chan_fidl_test_placementofattributes_ExampleProtocol_server])
fdio_service_connect$fidl_test_placementofattributes_ExampleProtocol(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_placementofattributes_ExampleProtocol_server)
zx_channel_write$fidl_test_placementofattributes_ExampleProtocolMethod(handle zx_chan_fidl_test_placementofattributes_ExampleProtocol_client, options const[0], bytes ptr[in, fidl_test_placementofattributes_ExampleProtocolMethodRequest], num_bytes bytesize[bytes], handles ptr[in, fidl_test_placementofattributes_ExampleProtocolMethodRequestHandles], num_handles bytesize[handles])

