// 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 privacy.
///
/// Supported SettingsEpitaph enums:
/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
@discoverable
protocol Privacy {
    /// Notifies of a change in privacy settings.
    ///
    /// On a given connection, the server will return immediately if this is the first call made,
    /// or if the `settings` value has changed since a previous call. Otherwise, the server will
    /// wait on a value change before returning the new value. This follows the hanging get pattern.
    ///
    /// If this call fails, it is considered a fatal error and the channel will be closed.
    Watch() -> (struct {
        settings PrivacySettings;
    });

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

type PrivacySettings = table {
    /// Reflects the user consent to have their user data shared with the product owner, e.g., for
    /// metrics collection and crash reporting.
    1: user_data_sharing_consent bool;
};
