Skip to content

Focinfi/gfsm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

gfms

gfsm is a finite state machine in Golang.

Install

go get github.com/Focinfi/gfsm

Example

If you are designing a Order struct

  import "github.com/Focinfi/gfsm"

  // design all order's states
  const (
    orderPending = "pending"
    orderPaid    = "paid"
    orderShipped = "shipped"
  )

  // create a new StateMachine
  var OrderStateMachine = gfsm.NewStateMachine(orderPending, orderPaid, orderShipped)

  // add a pay event for OrderStateMachine
  OrderStateMachine.Event("pay").Transition(orderPaid, orderPending)
  OrderStateMachine.Event("ship").Transition(orderShipped, orderPaid)
  // can only add state among in orderPending, orderPaid, orderShipped, or will return a non-nil error
  err := OrderStateMachine.Event("cancel").Transition(orderShipped, "unknown")

  // compose gfsm.State pointer into Order struct
  type Order struct {
    Name string
    *gfsm.State
  }

  // create new object with OrderStateMachine
  var order = &Order{Name: "order", State: gfsm.NewState(orderPending, OrderStateMachine)}

  // get the current state
  order.CurrentState() // "pending"

  // trigger the pay event
  if err := order.Trigger("pay"); err != nil {
    // do something when this order can not pay.
  } else {
    order.CurrentState() // "paid"
    // do something when this order can pay
  }

About

A finite state machine in Golang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages