// Copyright 2020 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 factory reset.
@discoverable(server="platform")
closed protocol FactoryReset {
    /// Notifies of a change in information about the factory reset settings.
    ///
    /// 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.
    strict Watch() -> (struct {
        settings FactoryResetSettings;
    });

    /// Sets factory reset settings. Any field not explicitly set in the table
    /// performs a no-op, and will not make any changes.
    strict Set(struct {
        settings FactoryResetSettings;
    }) -> () error Error;
};

/// Information about the factory reset settings.
type FactoryResetSettings = table {
    /// When set to true, a user is able to physically perform a factory reset.
    /// When false, that functionality is disabled.
    1: is_local_reset_allowed bool;
};
