Skip to content

nigzht/nfsm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nfsm

Description

nfsm is a type of non-deterministic state machine. Next states are determined by handlers with no pre-determined final state.

Installation

go get github.com/nigzht/nfsm@latest

Example

package main

import (
	"context"
	"errors"
	"fmt"
	"math/rand"
	"time"

	"github.com/nigzht/nfsm"
)

func main() {
	h := nfsm.Handlers{
		"generate": func(nfsm nfsm.Machine) (string, error) {
			rand.Seed(time.Now().UnixNano())

			nfsm.Metadata().Set("random_number", rand.Intn(2-0)+0)
			return "determine", nil
		},
		"determine": func(nfsm nfsm.Machine) (string, error) {
			fmt.Printf("current state: %s \nprevious state: %s \n", nfsm.Current(), nfsm.Previous())

			n := nfsm.Metadata().Get("random_number")

			n, ok := n.(int)
			if !ok {
				return "", errors.New("unexpected type")
			}

			fmt.Printf("random number: %d \n", n)

			if n == 0 {
				return "generate", nil
			}

			return "", nil
		},
	}

	if err := nfsm.NewNfsm(context.Background(), nfsm.NewFlow("generate", h)).Execute(); err != nil {
		fmt.Errorf("%v", err)
	}
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages