// 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.ledger;
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: fuchsia.ledger.PageId story_page_id;
};
