No description
Find a file
Vincent Ambo 45afa18846 feat(postgres): Compatibility with new associated error type
Changes the implementation of action execution to deal with the
returned associated errors.

The only sensible constraint on those errors that I could think of for
now is `Debug`, meaning that errors are now persisted as debug
messages.

This is not as nice to work with for a future implementation of
retryable actions as the equivalent in Haskell, but maybe an idea
shows up underway. The main issue is that most of the common error
types will not be implementing Serde traits, so serialization to/from
the same error type is difficult.

Adding an implementation constraint for JSON serialisation on error
types (i.e. `S::Error: Serialize + Deserialize`) would probably cause
headaches for users, especially if they are trying to use an
out-of-the-box error type or an error type wrapping foreign errors.

Det ska'kke være lett ...
2018-09-26 23:19:34 +02:00
finito-core feat(core): Add associated 'Error' type to FSM trait 2018-09-26 23:05:50 +02:00
finito-door feat(door): Use failure::Error as associated error type 2018-09-26 23:18:26 +02:00
finito-postgres feat(postgres): Compatibility with new associated error type 2018-09-26 23:19:34 +02:00
.gitignore feat(postgres): Add initial table schema for Finito tables 2018-09-26 18:19:10 +02:00
Cargo.toml feat(postgres): Bootstrap Postgres persistence implementation 2018-09-26 16:54:06 +02:00
README.md docs: Add initial README 2018-09-26 11:34:08 +02:00

Finito

This is a Rust port of the Haskell state-machine library Finito. It is slightly less featureful because it loses the ability to ensure that side-effects are contained and because of a slight reduction in expressivity, which makes it a bit more restrictive.

However, it still implements the FSM model well enough.

Components

Finito is split up into multiple independent components (note: not all of these exist yet), separating functionality related to FSM persistence from other things.

  • finito: Core abstraction implemented by Finito
  • finito-door: Example implementation of a simple, lockable door
  • finito-postgres: Persistent state-machines using Postgres

Note: The finito core library does not contain any tests. Its coverage is instead provided by the finito-door library, which actually implements an example FSM.

These are split out because the documentation for finito-door is interesting regardless and because other Finito packages also need an example implementation.