No description
Find a file
Vincent Ambo 406a90e8d6 feat(postgres): Implement initial (synchronous) actoin execution
Implements a simple model for executing actions which will run them in
sequence, synchronously, after advancing an FSM and committing the
initial transaction.

Note that multiple things are not yet taken into account:

* Error handling of actions (they can not currently fail)
* Retrying of actions
* Concurrency model

I started out by implementing the concurrency model similarly to the
green-threading method used in Hamingja (but using OS threads), but
slowly noticed that it may not be the best way to do that. It needs a
little bit of discussion.

Either way for most actions this method is fast enough to work for
implementing things on top of Finito's model.
2018-09-26 22:31:42 +02:00
finito-core docs: Add rustdoc header lines as expected by the format 2018-09-26 18:04:28 +02:00
finito-door feat(door): Add serde instances for door FSM types 2018-09-26 18:43:24 +02:00
finito-postgres feat(postgres): Implement initial (synchronous) actoin execution 2018-09-26 22:31:42 +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.