about summary refs log tree commit diff
path: root/finito-core/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'finito-core/src/lib.rs')
-rw-r--r--finito-core/src/lib.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/finito-core/src/lib.rs b/finito-core/src/lib.rs
index 2f27a2bdf958..8770a239dd0e 100644
--- a/finito-core/src/lib.rs
+++ b/finito-core/src/lib.rs
@@ -108,6 +108,7 @@
 //!
 //! Please reach out! I want to know why!
 
+use std::fmt::Debug;
 use std::mem;
 
 /// Primary trait that needs to be implemented for every state type
@@ -129,6 +130,10 @@ pub trait FSM where Self: Sized {
     /// actions that can occur in the state-machine.
     type Action;
 
+    /// The associated error type of an FSM represents failures that
+    /// can occur during action processing.
+    type Error: Debug;
+
     /// `handle` deals with any incoming events to cause state
     /// transitions and emit actions. This function is the core logic
     /// of any state machine.
@@ -152,7 +157,7 @@ pub trait FSM where Self: Sized {
 
     /// `act` interprets and executes FSM actions. This is the only
     /// part of an FSM in which side-effects are allowed.
-    fn act(Self::Action) -> Vec<Self::Event>;
+    fn act(Self::Action) -> Result<Vec<Self::Event>, Self::Error>;
 }
 
 /// This function is the primary function used to advance a state