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

using fuchsia.component;

/// A reference to a capability source or destination relative to this
/// component.
flexible union Ref {
    1: ParentRef parent;
    2: SelfRef self;
    3: ChildRef child;
    4: CollectionRef collection;
    5: FrameworkRef framework;
    6: CapabilityRef capability;
    7: DebugRef debug;
};

/// A reference to a component's parent instance.
struct ParentRef {
};

/// A reference to the component itself.
struct SelfRef {
};

/// A reference to the environment's debug capabilities.
struct DebugRef {
};

/// A reference to one of the component's child instances.
struct ChildRef {
    /// The name assigned to the child by its parent. If `collection` is set,
    /// `name` is scoped to `collection` and the child is a dynamic instance.
    /// Required.
    fuchsia.component.name name;
    /// The collection `name` belongs to. If omitted, `name` references a static
    /// instance. This field must be omitted if the `ChildRef` is being used in
    /// a component declaration. Optional.
    fuchsia.component.name? collection;
};

/// A reference to one of the component's collections.
struct CollectionRef {
    fuchsia.component.name name;
};

/// A reference to the component framework itself.
struct FrameworkRef {
};

/// A reference to a capability declared in this component.
struct CapabilityRef {
    string:fuchsia.component.MAX_NAME_LENGTH name;
};
