# 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 <fuchsia/devicesettings/c/fidl.h>
fuchsia_devicesettings_ValueType = fuchsia_devicesettings_ValueType_number, fuchsia_devicesettings_ValueType_text

fuchsia_devicesettings_DeviceSettingsManagerGetIntegerRequest {
	hdr		fidl_message_header[1556999609]
	keyInLine	fidl_string
	keyOutOfLine	fidl_aligned[stringnoz]
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerGetIntegerRequestHandles {
	void	void
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerGetIntegerResponseHandles {
	void	void
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerGetStringRequest {
	hdr		fidl_message_header[1273992648]
	keyInLine	fidl_string
	keyOutOfLine	fidl_aligned[stringnoz]
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerGetStringRequestHandles {
	void	void
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerGetStringResponseHandles {
	void	void
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerSetIntegerRequest {
	hdr		fidl_message_header[959124463]
	keyInLine	fidl_string
	val		int64
	keyOutOfLine	fidl_aligned[stringnoz]
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerSetIntegerRequestHandles {
	void	void
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerSetIntegerResponseHandles {
	void	void
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerSetStringRequest {
	hdr		fidl_message_header[569579958]
	keyInLine	fidl_string
	valInLine	fidl_string
	keyOutOfLine	fidl_aligned[stringnoz]
	valOutOfLine	fidl_aligned[stringnoz]
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerSetStringRequestHandles {
	void	void
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerSetStringResponseHandles {
	void	void
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerWatchRequest {
	hdr		fidl_message_header[975255377]
	keyInLine	fidl_string
	watcher		flags[fidl_handle_presence, int32]
	keyOutOfLine	fidl_aligned[stringnoz]
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerWatchRequestHandles {
	watcher	zx_chan_fuchsia_devicesettings_DeviceSettingsWatcher_client
} [packed]

fuchsia_devicesettings_DeviceSettingsManagerWatchResponseHandles {
	void	void
} [packed]

resource zx_chan_fuchsia_devicesettings_DeviceSettingsManager_client[zx_chan]
resource zx_chan_fuchsia_devicesettings_DeviceSettingsManager_server[zx_chan]

zx_channel_create$fuchsia_devicesettings_DeviceSettingsManager(options const[0], out0 ptr[out, zx_chan_fuchsia_devicesettings_DeviceSettingsManager_client], out1 ptr[out, zx_chan_fuchsia_devicesettings_DeviceSettingsManager_server])
fdio_service_connect$fuchsia_devicesettings_DeviceSettingsManager(path ptr[in, string["/svc/fuchsia.devicesettings.DeviceSettingsManager"]], handle zx_chan_fuchsia_devicesettings_DeviceSettingsManager_server)
zx_channel_call$fuchsia_devicesettings_DeviceSettingsManagerGetInteger(handle zx_chan_fuchsia_devicesettings_DeviceSettingsManager_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_devicesettings_DeviceSettingsManagerGetIntegerRequest, fuchsia_devicesettings_DeviceSettingsManagerGetIntegerRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_devicesettings_DeviceSettingsManagerGetIntegerResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fuchsia_devicesettings_DeviceSettingsManagerGetString(handle zx_chan_fuchsia_devicesettings_DeviceSettingsManager_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_devicesettings_DeviceSettingsManagerGetStringRequest, fuchsia_devicesettings_DeviceSettingsManagerGetStringRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_devicesettings_DeviceSettingsManagerGetStringResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fuchsia_devicesettings_DeviceSettingsManagerSetInteger(handle zx_chan_fuchsia_devicesettings_DeviceSettingsManager_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_devicesettings_DeviceSettingsManagerSetIntegerRequest, fuchsia_devicesettings_DeviceSettingsManagerSetIntegerRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_devicesettings_DeviceSettingsManagerSetIntegerResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fuchsia_devicesettings_DeviceSettingsManagerSetString(handle zx_chan_fuchsia_devicesettings_DeviceSettingsManager_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_devicesettings_DeviceSettingsManagerSetStringRequest, fuchsia_devicesettings_DeviceSettingsManagerSetStringRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_devicesettings_DeviceSettingsManagerSetStringResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fuchsia_devicesettings_DeviceSettingsManagerWatch(handle zx_chan_fuchsia_devicesettings_DeviceSettingsManager_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_devicesettings_DeviceSettingsManagerWatchRequest, fuchsia_devicesettings_DeviceSettingsManagerWatchRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_devicesettings_DeviceSettingsManagerWatchResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])

fuchsia_devicesettings_DeviceSettingsWatcherOnChangeSettingsRequest {
	hdr	fidl_message_header[616225214]
	type_	flags[fuchsia_devicesettings_ValueType, int8]
} [packed]

fuchsia_devicesettings_DeviceSettingsWatcherOnChangeSettingsRequestHandles {
	void	void
} [packed]

resource zx_chan_fuchsia_devicesettings_DeviceSettingsWatcher_client[zx_chan]
resource zx_chan_fuchsia_devicesettings_DeviceSettingsWatcher_server[zx_chan]

zx_channel_create$fuchsia_devicesettings_DeviceSettingsWatcher(options const[0], out0 ptr[out, zx_chan_fuchsia_devicesettings_DeviceSettingsWatcher_client], out1 ptr[out, zx_chan_fuchsia_devicesettings_DeviceSettingsWatcher_server])
fdio_service_connect$fuchsia_devicesettings_DeviceSettingsWatcher(path ptr[in, string["/svc/"]], handle zx_chan_fuchsia_devicesettings_DeviceSettingsWatcher_server)
zx_channel_write$fuchsia_devicesettings_DeviceSettingsWatcherOnChangeSettings(handle zx_chan_fuchsia_devicesettings_DeviceSettingsWatcher_client, options const[0], bytes ptr[in, fuchsia_devicesettings_DeviceSettingsWatcherOnChangeSettingsRequest], num_bytes bytesize[bytes], handles ptr[in, fuchsia_devicesettings_DeviceSettingsWatcherOnChangeSettingsRequestHandles], num_handles bytesize[handles])
