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

fuchsia_timezone_TimeServiceUpdateRequest {
	hdr		fidl_message_header[158808681]
	num_retries	int8
} [packed]

fuchsia_timezone_TimeServiceUpdateRequestHandles {
	void	void
} [packed]

fuchsia_timezone_TimeServiceUpdateResponseHandles {
	void	void
} [packed]

resource zx_chan_fuchsia_timezone_TimeService_client[zx_chan]
resource zx_chan_fuchsia_timezone_TimeService_server[zx_chan]

zx_channel_create$fuchsia_timezone_TimeService(options const[0], out0 ptr[out, zx_chan_fuchsia_timezone_TimeService_client], out1 ptr[out, zx_chan_fuchsia_timezone_TimeService_server])
fdio_service_connect$fuchsia_timezone_TimeService(path ptr[in, string["/svc/fuchsia.timezone.TimeService"]], handle zx_chan_fuchsia_timezone_TimeService_server)
zx_channel_call$fuchsia_timezone_TimeServiceUpdate(handle zx_chan_fuchsia_timezone_TimeService_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_timezone_TimeServiceUpdateRequest, fuchsia_timezone_TimeServiceUpdateRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_timezone_TimeServiceUpdateResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])

fuchsia_timezone_TimezoneGetTimezoneOffsetMinutesRequest {
	hdr				fidl_message_header[1814425986]
	milliseconds_since_epoch	int64
} [packed]

fuchsia_timezone_TimezoneGetTimezoneOffsetMinutesRequestHandles {
	void	void
} [packed]

fuchsia_timezone_TimezoneGetTimezoneOffsetMinutesResponseHandles {
	void	void
} [packed]

fuchsia_timezone_TimezoneSetTimezoneRequest {
	hdr			fidl_message_header[1904474588]
	timezone_idInLine	fidl_string
	timezone_idOutOfLine	fidl_aligned[stringnoz]
} [packed]

fuchsia_timezone_TimezoneSetTimezoneRequestHandles {
	void	void
} [packed]

fuchsia_timezone_TimezoneSetTimezoneResponseHandles {
	void	void
} [packed]

fuchsia_timezone_TimezoneGetTimezoneIdRequest {
	hdr	fidl_message_header[1119663833]
} [packed]

fuchsia_timezone_TimezoneGetTimezoneIdRequestHandles {
	void	void
} [packed]

fuchsia_timezone_TimezoneGetTimezoneIdResponseHandles {
	void	void
} [packed]

fuchsia_timezone_TimezoneWatchRequest {
	hdr	fidl_message_header[2067944433]
	watcher	flags[fidl_handle_presence, int32]
} [packed]

fuchsia_timezone_TimezoneWatchRequestHandles {
	watcher	zx_chan_fuchsia_timezone_TimezoneWatcher_client
} [packed]

resource zx_chan_fuchsia_timezone_Timezone_client[zx_chan]
resource zx_chan_fuchsia_timezone_Timezone_server[zx_chan]

zx_channel_create$fuchsia_timezone_Timezone(options const[0], out0 ptr[out, zx_chan_fuchsia_timezone_Timezone_client], out1 ptr[out, zx_chan_fuchsia_timezone_Timezone_server])
fdio_service_connect$fuchsia_timezone_Timezone(path ptr[in, string["/svc/fuchsia.timezone.Timezone"]], handle zx_chan_fuchsia_timezone_Timezone_server)
zx_channel_call$fuchsia_timezone_TimezoneGetTimezoneOffsetMinutes(handle zx_chan_fuchsia_timezone_Timezone_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_timezone_TimezoneGetTimezoneOffsetMinutesRequest, fuchsia_timezone_TimezoneGetTimezoneOffsetMinutesRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_timezone_TimezoneGetTimezoneOffsetMinutesResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fuchsia_timezone_TimezoneSetTimezone(handle zx_chan_fuchsia_timezone_Timezone_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_timezone_TimezoneSetTimezoneRequest, fuchsia_timezone_TimezoneSetTimezoneRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_timezone_TimezoneSetTimezoneResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_call$fuchsia_timezone_TimezoneGetTimezoneId(handle zx_chan_fuchsia_timezone_Timezone_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_timezone_TimezoneGetTimezoneIdRequest, fuchsia_timezone_TimezoneGetTimezoneIdRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_timezone_TimezoneGetTimezoneIdResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
zx_channel_write$fuchsia_timezone_TimezoneWatch(handle zx_chan_fuchsia_timezone_Timezone_client, options const[0], bytes ptr[in, fuchsia_timezone_TimezoneWatchRequest], num_bytes bytesize[bytes], handles ptr[in, fuchsia_timezone_TimezoneWatchRequestHandles], num_handles bytesize[handles])

fuchsia_timezone_TimezoneWatcherOnTimezoneOffsetChangeRequest {
	hdr			fidl_message_header[1964417497]
	timezone_idInLine	fidl_string
	timezone_idOutOfLine	fidl_aligned[stringnoz]
} [packed]

fuchsia_timezone_TimezoneWatcherOnTimezoneOffsetChangeRequestHandles {
	void	void
} [packed]

resource zx_chan_fuchsia_timezone_TimezoneWatcher_client[zx_chan]
resource zx_chan_fuchsia_timezone_TimezoneWatcher_server[zx_chan]

zx_channel_create$fuchsia_timezone_TimezoneWatcher(options const[0], out0 ptr[out, zx_chan_fuchsia_timezone_TimezoneWatcher_client], out1 ptr[out, zx_chan_fuchsia_timezone_TimezoneWatcher_server])
fdio_service_connect$fuchsia_timezone_TimezoneWatcher(path ptr[in, string["/svc/"]], handle zx_chan_fuchsia_timezone_TimezoneWatcher_server)
zx_channel_write$fuchsia_timezone_TimezoneWatcherOnTimezoneOffsetChange(handle zx_chan_fuchsia_timezone_TimezoneWatcher_client, options const[0], bytes ptr[in, fuchsia_timezone_TimezoneWatcherOnTimezoneOffsetChangeRequest], num_bytes bytesize[bytes], handles ptr[in, fuchsia_timezone_TimezoneWatcherOnTimezoneOffsetChangeRequestHandles], num_handles bytesize[handles])
