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

/// State used to notify about state transitions of a Module
/// instance. This is very similar to the StoryState, however it's not entirely
/// the same and hence a separate type. A module cannot have an INITIAL state,
/// because it's started as soon as it is created, and it gets deleted as soon as
/// it reaches the STOPPED state, whileas a story can be restarted.
///
/// Currently possible state transitions (and the events that cause
/// them) are:
///
///            -> RUNNING     ModuleContext.AddModuleToStory() or
///                           ModuleContext.EmbedModule() or
///                           StoryController.AddModule()
///   RUNNING  -> STOPPED     ModuleController.Stop() or StoryController.Stop()
///   RUNNING  -> ERROR       application exits
enum ModuleState {
    /// Module instance was created.
    RUNNING = 2;
    /// Module instance is stopped after Module.Stop(). No further transitions are
    /// to be expected.
    STOPPED = 4;
    /// Connection to the Module instance was closed without Stop() request. No
    /// further transitions are to be expected.
    ERROR = 5;
};
