# 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/requestflexibleenvelope/c/fidl.h>
fidl_test_requestflexibleenvelope_FlexibleFooInLine [
       sInLine fidl_union_member[1, fidl_string]
       i fidl_union_member[2, int32]
]
fidl_test_requestflexibleenvelope_FlexibleFooOutOfLine [
       sOutOfLine fidl_aligned[stringnoz]
][varlen]
fidl_test_requestflexibleenvelope_FlexibleFooHandles [
       void void
][varlen]
fidl_test_requestflexibleenvelope_StrictFooInLine [
       sInLine fidl_union_member[1, fidl_string]
       i fidl_union_member[2, int32]
]
fidl_test_requestflexibleenvelope_StrictFooOutOfLine [
       sOutOfLine fidl_aligned[stringnoz]
][varlen]
fidl_test_requestflexibleenvelope_StrictFooHandles [
       void void
][varlen]


fidl_test_requestflexibleenvelope_ProtocolRequestStrictResponseFlexibleRequest {
       hdr fidl_message_header[4346871690266280218]
       sInLine fidl_test_requestflexibleenvelope_StrictFooInLine
       sOutOfLine fidl_test_requestflexibleenvelope_StrictFooOutOfLine
} [packed]
fidl_test_requestflexibleenvelope_ProtocolRequestStrictResponseFlexibleRequestHandles {
       void void
} [packed]
fidl_test_requestflexibleenvelope_ProtocolRequestStrictResponseFlexibleResponse {
       hdr fidl_message_header[4346871690266280218]
       fInLine fidl_test_requestflexibleenvelope_FlexibleFooInLine
       fOutOfLine fidl_test_requestflexibleenvelope_FlexibleFooOutOfLine
} [packed]
fidl_test_requestflexibleenvelope_ProtocolRequestStrictResponseFlexibleResponseHandles {
       void void
} [packed]
fidl_test_requestflexibleenvelope_ProtocolRequestFlexibleResponseStrictRequest {
       hdr fidl_message_header[4374294377437089654]
       sInLine fidl_test_requestflexibleenvelope_FlexibleFooInLine
       sOutOfLine fidl_test_requestflexibleenvelope_FlexibleFooOutOfLine
} [packed]
fidl_test_requestflexibleenvelope_ProtocolRequestFlexibleResponseStrictRequestHandles {
       void void
} [packed]
fidl_test_requestflexibleenvelope_ProtocolRequestFlexibleResponseStrictResponse {
       hdr fidl_message_header[4374294377437089654]
       fInLine fidl_test_requestflexibleenvelope_StrictFooInLine
       fOutOfLine fidl_test_requestflexibleenvelope_StrictFooOutOfLine
} [packed]
fidl_test_requestflexibleenvelope_ProtocolRequestFlexibleResponseStrictResponseHandles {
       void void
} [packed]

resource zx_chan_fidl_test_requestflexibleenvelope_Protocol_client[zx_chan]
resource zx_chan_fidl_test_requestflexibleenvelope_Protocol_server[zx_chan]

zx_channel_create$fidl_test_requestflexibleenvelope_Protocol(options const[0], out0 ptr[out, zx_chan_fidl_test_requestflexibleenvelope_Protocol_client], out1 ptr[out, zx_chan_fidl_test_requestflexibleenvelope_Protocol_server])
fdio_service_connect$fidl_test_requestflexibleenvelope_Protocol(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_requestflexibleenvelope_Protocol_server)
zx_channel_call$fidl_test_requestflexibleenvelope_ProtocolRequestStrictResponseFlexible(handle zx_chan_fidl_test_requestflexibleenvelope_Protocol_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fidl_test_requestflexibleenvelope_ProtocolRequestStrictResponseFlexibleRequest, fidl_test_requestflexibleenvelope_ProtocolRequestStrictResponseFlexibleRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fidl_test_requestflexibleenvelope_ProtocolRequestStrictResponseFlexibleResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fidl_test_requestflexibleenvelope_ProtocolRequestFlexibleResponseStrict(handle zx_chan_fidl_test_requestflexibleenvelope_Protocol_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fidl_test_requestflexibleenvelope_ProtocolRequestFlexibleResponseStrictRequest, fidl_test_requestflexibleenvelope_ProtocolRequestFlexibleResponseStrictRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fidl_test_requestflexibleenvelope_ProtocolRequestFlexibleResponseStrictResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])

