// 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
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;
};
