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

using fuchsia.mem;

/// Defines the attributes for a Link when the Link is created.
struct CreateLinkInfo {
    /// Passed as root_json argument to StoryProvider.CreateStoryWithInfo()
    /// Link.Set() to set the value in the root link of the new Story's primary
    /// module.
    fuchsia.mem.Buffer initial_data;

    /// If `allowed_types` is null, the Link contains JSON. No schema validation
    /// is performed.
    LinkAllowedTypes? allowed_types;
};

struct LinkAllowedTypes {
    /// The Link must contain an Entity (see Link.SetEntity()) that has at least
    /// one of `allowed_entity_types` in its `Entity.GetTypes()` return value.
    ///
    /// If empty, allows any Entity type.
    vector<string> allowed_entity_types;
};
