| // Copyright 2018 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; |
| |
| /// StoryCommands are POD structures that describe the set of operations that |
| /// can be performed on a story by components outside the modular framework. All commands are: |
| /// |
| /// (1) Scoped to a single story |
| /// (2) Idempotent: issuing the same command twice yields the same result |
| /// (3) Symmetrical with observation: the same structures are used to describe |
| /// operations to watchers of a story (through SessionWatcher) as are used |
| /// to control a story. |
| type StoryCommand = strict resource union { |
| // Deprecated operation: set_focus_state. |
| 1: reserved; |
| |
| /// Adds a Mod. |
| 2: add_mod AddMod; |
| |
| /// Removes an existing Mod. |
| 3: remove_mod RemoveMod; |
| |
| // Deprecated operation: set_link_value. |
| 4: reserved; |
| |
| // Deprecated operation: focus_mod. |
| 5: reserved; |
| |
| // Deprecated operation: set_kind_of_proto_story_option. |
| 6: reserved; |
| }; |
| |
| /// Adds a mod described by `intent` to the story with name `mod_name`. If |
| /// `mod_name` already exists in the story, the mod is updated. |
| type AddMod = resource struct { |
| /// The name of the mod within the story. The mod's name acts as the unique |
| /// ID of the mod, scoped to the story in which it is contained. Since |
| /// AddMod is reused for observation and mod names are vector<string:MAX> |
| /// inside the framework, they are vector<string:MAX>:MAX here as well. |
| /// |
| /// Clients should treat the full vector as a single opaque value. |
| /// |
| /// Clients should provide `mod_name_transitional` instead. |
| /// If both are provided, `mod_name` is ignored. |
| /// |
| // TODO(fxbug.dev/16089): Convert to string |
| mod_name vector<string:MAX>:MAX; |
| |
| /// The name of the mod within the story. This should be used instead of |
| /// `mod_name`. If provided, it is equivalent to passing `mod_name` with |
| /// a single item. If both are provided, `mod_name` is ignored. |
| /// |
| // TODO(fxbug.dev/16089): Remove |
| mod_name_transitional string:<MAX, optional>; |
| |
| intent Intent; |
| |
| /// `surface_relation` defines the visual relationship between this mod and the |
| /// mod at `surface_parent_mod_name`. |
| surface_relation SurfaceRelation; |
| surface_parent_mod_name vector<string:MAX>:<MAX, optional>; |
| }; |
| |
| /// Removes the mod under `mod_name` from the story. |
| type RemoveMod = struct { |
| /// The name of the mod within the story. |
| /// |
| /// Clients should provide `mod_name_transitional` instead. |
| /// If both are provided, `mod_name` is ignored. |
| /// |
| // TODO(fxbug.dev/16089): Convert to string |
| mod_name vector<string:MAX>:MAX; |
| |
| /// The name of the mod within the story. This should be used instead of |
| /// `mod_name`. If provided, it is equivalent to passing `mod_name` with |
| /// a single item. If both are provided, `mod_name` is ignored. |
| /// |
| // TODO(fxbug.dev/16089): Remove |
| mod_name_transitional string:<MAX, optional>; |
| }; |