// Copyright 2025 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.

/// Provides control of the FTL outside of the normal block operations
/// (read/write/trim/etc) or filesystem operations (mount/unmount/format/etc).
@available(added=25)
library fuchsia.storage.ftl;

using zx;

/// The list of configuration options.
type ConfigurationOptions = table {
    /// Use wear leveling that migrates long-lived data onto heavily worn blocks.
    1: use_new_wear_leveling bool;
};

/// Provides getter and setter for the state of the FTL configuration. Currently
/// only supports the wear leveling changes to be turned on and off.
@discoverable(server="platform")
closed protocol Configuration {
    /// Get the current configuration.
    strict Get() -> (ConfigurationOptions) error zx.Status;

    /// Set the current configuration.
    strict Set(ConfigurationOptions) -> () error zx.Status;
};

service Service {
    config client_end:Configuration;
};
