// Copyright 2018 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.sys2;

using fuchsia.io;

// A namespace specifies the set of directories that a component instance
// receives at start-up.  Each component instance's namespace is tailored
// to provide access to a set of files and services that are appropriate
// to that component instance's role in the system (its sandbox).
//
// By convention, a component's namespace typically contains some or all
// of the following directories:
//
// - "/svc": A directory containing services that the component requested
//           to use via its "import" declarations.
// - "/pkg": A directory containing the component's package, including its
//           binaries, libraries, and other assets.
struct ComponentNamespace {
    // The mount point for each of the directories below, each including a
    // leading slash.  For example, ["/pkg", "/svc", "/config/data"].
    //
    // Each mount point must be unique and non-overlapping.
    // For example, ["/foo", "/foo/bar"] is invalid.
    vector<string> paths;

    // The directories mounted at each path in the namespace.
    vector<fuchsia.io.Directory> directories;
};
