// Copyright 2016 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.internal;

using fuchsia.modular;

/// Metadata and summary information about a single story.  Does not contain the
/// data necessary to run a story: see story_model.fidl for that.
table StoryData {
    /// Metadata available to the SessionShell.
    1: fuchsia.modular.StoryInfo2 story_info;

    /// A client-supplied name for this story.
    2: string story_name;

    /// Story metadata and configuration.
    3: fuchsia.modular.StoryOptions story_options;

    /// Page id on the user's ledger which stores story information.
    4: string story_page_id;
};
