// Copyright 2021 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.component.decl;

using fuchsia.data;

/// A program declaration.
///
/// This declaration is set by executable components to designate the runner to
/// use and pass runner-specific program information to it.
///
/// To learn more about runners, see:
/// https://fuchsia.dev/fuchsia-src/glossary#runner
type Program = table {
    /// The name of the runner to use to run the component. Must match a `RunnerRegistration` in the
    /// component's environment. If this value is not supplied, the component must 'use' a runner.
    /// If this value is supplied, the component may 'use' a runner, but it must be identical
    /// (matching name, from environment).
    1: runner name;

    /// (Required) Information about the program to run when the component is
    /// executed. The component manager provides the contents of this dictionary
    /// to the runner when executing this program.
    ///
    /// For instance, this might contain a path to the program's executable
    /// image, or program arguments.
    ///
    /// * The keys represent namespaced properties, delimited by ".".
    /// * Properties may be nested in values, but only in the case of an object
    /// vector.
    2: info fuchsia.data.Dictionary;
};
