// Copyright 2017 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.modular;

/// Module parameters are named pointers to link instances.
struct CreateModuleParameterMapInfo {
    /// Contains instructions to create each name in the parameter map.
    vector<CreateModuleParameterMapEntry>? property_info;
};

struct CreateModuleParameterMapEntry {
    string? key;
    CreateModuleParameterInfo value;
};

union CreateModuleParameterInfo {
    /// Instructs parameter map initialization to either use an existing Link
    /// (`link_path` is set) or create a new Link (`create_link` is set).
    1: LinkPath link_path;
    2: CreateLinkInfo create_link;
};
