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

using fuchsia.mem as mem;
using zx;

/// Protocol to allow components to provide initial configuration data derived from
/// an existing Weave implementation to ensure continuity of the Weave fabric and
/// other Weave settings or configuration data.
@discoverable
closed protocol Bootstrap {
    /// Import a JSON-formatted Weave config providing data in the format
    /// expected to satisfy the Weave DeviceLayer
    /// [ConfigurationManager](https://github.com/openweave/openweave-core/blob/master/src/adaptations/device-layer/include/Weave/DeviceLayer/ConfigurationManager.h).
    ///
    /// Configuration is guaranteed to have been persisted upon successful
    /// completion of this call.
    strict ImportWeaveConfig(resource struct {
        config_json mem.Buffer;
    }) -> () error zx.Status;
};
