// Copyright 2022 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.
@available(added=7)
library fuchsia.update.config;

/// User specified preference for automatic updates.
type OptOutPreference = strict enum {

    /// Allow all updates to be automatically applied.
    ALLOW_ALL_UPDATES = 1;

    /// Only allow security updates to be automatically applied.
    ALLOW_ONLY_SECURITY_UPDATES = 2;
};

/// An error encountered while administering the user's opt-out preference.
type OptOutAdminError = flexible enum {

    /// There was an internal error in setting the value.  The client is not
    /// expected to be able to do something meaningful about this error,
    /// except to try again later.
    INTERNAL = 1;
};

/// The state of the update system's opt-out functionality.
@discoverable
protocol OptOut {

    /// Gets the current update opt-out status.
    ///
    /// - response `value` The user's current opt-out preference.
    Get() -> (struct {
        value OptOutPreference;
    });
};

/// Management for the state of the update system's opt-out functionality.
@discoverable
protocol OptOutAdmin {

    /// Sets the update opt-out preference to `value`.
    ///
    /// + request `value` The user's new opt-out preference.
    ///
    /// * error Any error encountered while persisting the new setting.
    Set(struct {
        value OptOutPreference;
    }) -> (struct {}) error OptOutAdminError;
};
