// 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.pkg;

/// This configures a package resolver.
[Discoverable]
protocol PackageResolverAdmin {
    /// Sets an experiment toggle to a specific state (on or off).
    ///
    /// Experiment states are not persisted and apply only while the resolver
    /// is running.
    ///
    /// + request `experiment_id` the experiment to enable or disable.
    /// + request `state` the state the experiment should be set to.
    SetExperimentState(ExperimentToggle experiment_id, bool state) -> ();
};

/// List of known experiment toggles.
enum ExperimentToggle : uint64 {
    /// This does nothing, but is visible in inspect.
    LIGHTBULB = 0;

    // Next unused experiment id: 3
};
