// Copyright 2019 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.

library fuchsia.settings;

/// Settings related to device info.
///
/// Supported SettingsEpitaph enums:
/// FILE_READ_ERROR, INTERNAL_SERVICE_ERROR
[Discoverable]
protocol Device {
    /// Notifies of a change in information about the device.
    ///
    /// On a given connection, the first call will return the current `settings` value while
    /// subsequent calls will only return the new `settings` value upon a value change. This
    /// follows the hanging get pattern.
    ///
    /// If this call fails, it is considered a fatal error and the channel
    /// will be closed.
    Watch() -> (DeviceSettings device_settings);
};

/// Information about the device.
table DeviceSettings {
    /// The identifier representing the specific build that the device
    /// is currently running. Read-only field, cannot be set by client.
    1: string:50 build_tag;
};
