// 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;
using fuchsia.data;
using fuchsia.io2;

/// Declares a capability used by a component, which was offered to it.
flexible union UseDecl {
    1: UseServiceDecl service;
    2: UseProtocolDecl protocol;
    3: UseDirectoryDecl directory;
    4: UseStorageDecl storage;
    5: UseEventDecl event;
    6: UseEventStreamDecl event_stream;
};

/// Declares a service used by a component, which was offered to it.
///
/// To learn more about services, see:
/// https://fuchsia.dev/fuchsia-src/glossary#service
table UseServiceDecl {
    /// The provider of the service relative to the component itself. Must
    /// be `parent` or `framework`.
    1: Ref source;

    /// Name identifying the service, by which it was presented to this
    /// component.
    2: fuchsia.component.name source_name;

    /// The path where the capability should be installed in the component's
    /// namespace.
    ///
    /// Must be an absolute path starting with /.
    3: string:fuchsia.component.MAX_PATH_LENGTH target_path;
};

/// Declares a protocol used by a component, which was offered to it.
///
/// A protocol is a service with a single instance, provided by a single FIDL
/// protocol.
table UseProtocolDecl {
    /// The provider of the protocol relative to the component itself.
    /// Must be `parent`, `framework`, `debug` or `capability`.
    1: Ref source;

    /// Name identifying the protocol, by which it was presented to this
    /// component.
    2: fuchsia.component.name source_name;

    /// The path where the capability should be installed in the component's
    /// namespace.
    ///
    /// Must be an absolute path starting with /.
    3: string:fuchsia.component.MAX_PATH_LENGTH target_path;
};

/// Declares a directory used by a component, which was offered to it.
table UseDirectoryDecl {
    /// The provider of the directory relative to the component itself. Must
    /// be `parent` or `framework`.
    1: Ref source;

    /// Name identifying the directory, by which it was presented to this
    /// component.
    2: fuchsia.component.name source_name;

    /// The path where the capability should be installed in the component's
    /// namespace.
    ///
    /// Must be an absolute path starting with /.
    3: string:fuchsia.component.MAX_PATH_LENGTH target_path;

    /// The rights required by the component to use this directory.
    4: fuchsia.io2.Rights rights;

    /// The subdirectory of this directory to use instead of the root. Optional.
    5: string:fuchsia.component.MAX_PATH_LENGTH subdir;
};

/// Declares storage used by a component, which was offered to it.
table UseStorageDecl {
    /// Name identifying the storage, by which it was presented to this
    /// component.
    1: fuchsia.component.name source_name;

    /// The path where the capability should be installed in the component's
    /// namespace.
    ///
    /// Must be an absolute path starting with /.
    2: string:fuchsia.component.MAX_PATH_LENGTH target_path;
};

/// Declares an event used by a component, which was offered to it.
table UseEventDecl {
    /// The provider of the event. Must be |realm| or |framework|.
    1: Ref source;

    /// Name identifying the event which was presented to this component.
    2: fuchsia.component.name source_name;

    /// The name which the component will use to refer to this event.
    3: fuchsia.component.name target_name;

    /// Filter for the event. The structure of the filter depends on the event type. May be absent
    /// for some events.
    4: fuchsia.data.Dictionary filter;

    /// The mode that the event can use.
    5: EventMode mode;
};

/// Declares a static EventStream used by a component.
table UseEventStreamDecl {
    /// The name of the event stream.
    1: fuchsia.component.name name;

    /// The set of events to which this EventStream is subscribed.
    /// Note: This vector must be non-empty.
    2: vector<EventSubscription>:fuchsia.component.MAX_NUM_EVENTS_RECEIVED subscriptions;
};
