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


fidl_test_service_FirstProtocolMethodOnFirstRequest {
       hdr fidl_message_header[6590661047173168036]
} [packed]
fidl_test_service_FirstProtocolMethodOnFirstRequestHandles {
       void void
} [packed]

resource zx_chan_fidl_test_service_FirstProtocol_client[zx_chan]
resource zx_chan_fidl_test_service_FirstProtocol_server[zx_chan]

zx_channel_create$fidl_test_service_FirstProtocol(options const[0], out0 ptr[out, zx_chan_fidl_test_service_FirstProtocol_client], out1 ptr[out, zx_chan_fidl_test_service_FirstProtocol_server])
fdio_service_connect$fidl_test_service_FirstProtocol(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_service_FirstProtocol_server)
zx_channel_write$fidl_test_service_FirstProtocolMethodOnFirst(handle zx_chan_fidl_test_service_FirstProtocol_client, options const[0], bytes ptr[in, fidl_test_service_FirstProtocolMethodOnFirstRequest], num_bytes bytesize[bytes], handles ptr[in, fidl_test_service_FirstProtocolMethodOnFirstRequestHandles], num_handles bytesize[handles])


fidl_test_service_SecondProtocolMethodOnSecondRequest {
       hdr fidl_message_header[6118813307380259369]
} [packed]
fidl_test_service_SecondProtocolMethodOnSecondRequestHandles {
       void void
} [packed]

resource zx_chan_fidl_test_service_SecondProtocol_client[zx_chan]
resource zx_chan_fidl_test_service_SecondProtocol_server[zx_chan]

zx_channel_create$fidl_test_service_SecondProtocol(options const[0], out0 ptr[out, zx_chan_fidl_test_service_SecondProtocol_client], out1 ptr[out, zx_chan_fidl_test_service_SecondProtocol_server])
fdio_service_connect$fidl_test_service_SecondProtocol(path ptr[in, string["/svc/"]], handle zx_chan_fidl_test_service_SecondProtocol_server)
zx_channel_write$fidl_test_service_SecondProtocolMethodOnSecond(handle zx_chan_fidl_test_service_SecondProtocol_client, options const[0], bytes ptr[in, fidl_test_service_SecondProtocolMethodOnSecondRequest], num_bytes bytesize[bytes], handles ptr[in, fidl_test_service_SecondProtocolMethodOnSecondRequestHandles], num_handles bytesize[handles])

