// Copyright 2017 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.devicesettings;

enum Status : uint8 {
    ok = 1;
    errNotSet = 2;
    errInvalidSetting = 3;
    errRead = 4;
    errIncorrectType = 5;
    errUnknown = 6;
};

enum ValueType : uint8 {
    number = 1;
    text = 2;
};

// Manager interface used to manage settings
[Discoverable]
protocol DeviceSettingsManager {
    GetInteger(string key) -> (int64 val, Status s);

    GetString(string key) -> (string val, Status s);

    // Returns false on database error and true on success.
    SetInteger(string key, int64 val) -> (bool result);

    // Returns false on database error and true on success.
    SetString(string key, string val) -> (bool result);

    // Register a watcher to be called when a setting changes
    // Returns Status::ok, Status::errInvalidSetting or Status::errUnknown
    Watch(string key, DeviceSettingsWatcher watcher) -> (Status s);
};

// A watcher for device settings changes
protocol DeviceSettingsWatcher {
    OnChangeSettings(ValueType type);
};
