@@ -12,8 +12,12 @@ import (
1212 "github.com/lightninglabs/loop/fsm"
1313 "github.com/lightninglabs/loop/instantout"
1414 "github.com/lightninglabs/loop/instantout/reservation"
15+ "github.com/lightninglabs/loop/staticaddr/deposit"
16+ "github.com/lightninglabs/loop/staticaddr/loopin"
1517)
1618
19+ var errInvalidFSMSelector = errors .New ("missing or unknown fsm selector" )
20+
1721func main () {
1822 if err := run (); err != nil {
1923 fmt .Println (err )
@@ -35,35 +39,43 @@ func run() error {
3539 return err
3640 }
3741
38- switch * stateMachine {
42+ states , err := getStates (* stateMachine )
43+ if err != nil {
44+ return err
45+ }
46+
47+ return writeMermaidFile (fp , states )
48+ }
49+
50+ func getStates (stateMachine string ) (fsm.States , error ) {
51+ switch stateMachine {
3952 case "example" :
4053 exampleFSM := & fsm.ExampleFSM {}
41- err = writeMermaidFile (fp , exampleFSM .GetStates ())
42- if err != nil {
43- return err
44- }
54+ return exampleFSM .GetStates (), nil
4555
4656 case "reservation" :
4757 reservationFSM := & reservation.FSM {}
48- err = writeMermaidFile (fp , reservationFSM .GetServerInitiatedReservationStates ())
49- if err != nil {
50- return err
51- }
58+ return reservationFSM .GetServerInitiatedReservationStates (), nil
5259
5360 case "instantout" :
54- instantout := & instantout.FSM {}
55- err = writeMermaidFile (fp , instantout .GetV1ReservationStates ())
56- if err != nil {
57- return err
58- }
61+ instantOutFSM := & instantout.FSM {}
62+ return instantOutFSM .GetV1ReservationStates (), nil
63+
64+ case "staticaddr-deposit" :
65+ depositFSM := & deposit.FSM {}
66+ return depositFSM .DepositStatesV0 (), nil
67+
68+ case "staticaddr-loopin" :
69+ loopInFSM := & loopin.FSM {}
70+ return loopInFSM .LoopInStatesV0 (), nil
5971
6072 default :
61- fmt .Println ("Missing or wrong argument: fsm must be one of:" )
62- fmt .Println ("\t reservations" )
63- fmt .Println ("\t example" )
73+ return nil , fmt .Errorf (
74+ "%w %q; supported selectors: example, instantout, " +
75+ "reservation, staticaddr-deposit, staticaddr-loopin" ,
76+ errInvalidFSMSelector , stateMachine ,
77+ )
6478 }
65-
66- return nil
6779}
6880
6981func writeMermaidFile (filename string , states fsm.States ) error {
@@ -86,8 +98,11 @@ func writeMermaidFile(filename string, states fsm.States) error {
8698 state = "[*]"
8799 }
88100 // write transitions
89- for edge , target := range edges .Transitions {
90- fmt .Fprintf (& b , "%s --> %s: %s\n " , state , target , edge )
101+ for _ , edge := range sortedTransitionKeys (edges .Transitions ) {
102+ fmt .Fprintf (
103+ & b , "%s --> %s: %s\n " , state ,
104+ edges .Transitions [fsm .EventType (edge )], edge ,
105+ )
91106 }
92107 }
93108
@@ -110,3 +125,14 @@ func sortedKeys(m fsm.States) []string {
110125 sort .Strings (keys )
111126 return keys
112127}
128+
129+ func sortedTransitionKeys (m fsm.Transitions ) []string {
130+ keys := make ([]string , len (m ))
131+ i := 0
132+ for k := range m {
133+ keys [i ] = string (k )
134+ i ++
135+ }
136+ sort .Strings (keys )
137+ return keys
138+ }
0 commit comments