// 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.
struct StoryData {
    // Metadata available to the SessionShell.
    fuchsia.modular.StoryInfo story_info;

    // An optional client-supplied name for this story.
    string? story_name;

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

    // Page id on the user's ledger which stores story information. It
    // might be NULL until the story is being started.
    fuchsia.ledger.PageId? story_page_id;
};
