51 lines
1.9 KiB
Go
51 lines
1.9 KiB
Go
|
// Copyright 2024 Matthew Rich <matthewrich.conf@gmail.com>. All rights reserved.
|
||
|
|
||
|
package data
|
||
|
|
||
|
import (
|
||
|
"gitea.rosskeen.house/rosskeen.house/machine"
|
||
|
)
|
||
|
|
||
|
func StorageMachine(sub machine.Subscriber) machine.Stater {
|
||
|
// start_destroy -> absent -> start_create -> present -> start_destroy
|
||
|
stater := machine.New("unknown")
|
||
|
stater.AddStates("initialized", "unkonwn", "absent", "start_create", "present", "start_delete", "start_read", "start_update")
|
||
|
stater.AddTransition("construct", machine.States("unknown"), "initialized")
|
||
|
stater.AddTransition("create", machine.States("unknown", "initialized", "absent"), "start_create")
|
||
|
if e := stater.AddSubscription("create", sub); e != nil {
|
||
|
return nil
|
||
|
}
|
||
|
stater.AddTransition("created", machine.States("start_create"), "present")
|
||
|
if e := stater.AddSubscription("created", sub); e != nil {
|
||
|
return nil
|
||
|
}
|
||
|
stater.AddTransition("exists", machine.States("unknown", "initialized", "absent"), "present")
|
||
|
if e := stater.AddSubscription("exists", sub); e != nil {
|
||
|
return nil
|
||
|
}
|
||
|
stater.AddTransition("notexists", machine.States("*"), "absent")
|
||
|
if e := stater.AddSubscription("notexists", sub); e != nil {
|
||
|
return nil
|
||
|
}
|
||
|
stater.AddTransition("read", machine.States("*"), "start_read")
|
||
|
if e := stater.AddSubscription("read", sub); e != nil {
|
||
|
return nil
|
||
|
}
|
||
|
stater.AddTransition("state_read", machine.States("start_read"), "present")
|
||
|
stater.AddTransition("update", machine.States("*"), "start_update")
|
||
|
if e := stater.AddSubscription("update", sub); e != nil {
|
||
|
return nil
|
||
|
}
|
||
|
stater.AddTransition("updated", machine.States("start_update"), "present")
|
||
|
stater.AddTransition("delete", machine.States("*"), "start_delete")
|
||
|
if e := stater.AddSubscription("delete", sub); e != nil {
|
||
|
return nil
|
||
|
}
|
||
|
stater.AddTransition("deleted", machine.States("start_delete"), "absent")
|
||
|
if e := stater.AddSubscription("deleted", sub); e != nil {
|
||
|
return nil
|
||
|
}
|
||
|
return stater
|
||
|
}
|
||
|
|