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

library fuchsia.boot;

using fuchsia.io;
using zx;

/// Protocol for storing svc server ends of 'svc' for later processing during early boot.
closed protocol SvcStash {
    /// Store a svc_endpoint in the stash. Stored endpoints will remain in transit,
    /// since there might not be a server side implementation. The server end
    /// is retrieved by |SvcStashProvider/Get|.
    strict Store(resource struct {
        svc_endpoint server_end:fuchsia.io.Directory;
    });
};

/// Protocol for providing the server end of the 'SvcStash'.
@discoverable
closed protocol SvcStashProvider {
    /// Get the SvcStash server endpoint.
    ///
    /// There is at most one instance for the system, meaning only the first caller
    /// may consume the handle.
    strict Get() -> (resource struct {
        resource server_end:SvcStash;
    }) error zx.Status;
};
