summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorewy <ewy0@protonmail.com>2026-05-02 17:24:39 +0200
committerewy <ewy0@protonmail.com>2026-05-02 17:24:39 +0200
commit65d273d0da5c1a742425e899f053bbee0fef0600 (patch)
tree2046a69020ea5dc4f0b011ff836fb0945d22233f
parent1b61ac20cf226472964111156d64d61ca6f7ac60 (diff)
add docs
-rw-r--r--modes.go16
1 files changed, 14 insertions, 2 deletions
diff --git a/modes.go b/modes.go
index 0ba6e8c..43652b4 100644
--- a/modes.go
+++ b/modes.go
@@ -11,8 +11,18 @@ import (
"os"
)
+// ModeMap maps flags to specific operation modes
type ModeMap[T any] map[*bool]T
+// Continue can be returned as an error to continue program flow
+var Continue = errors.New("not an error; continue flow")
+
+// Traverse checks the entries of the map. If any flags are set on,
+// run that mode. If Continue is returned, it's non-exclusive. Otherwise,
+// we quit after one mode.
+//
+// `then` should simply be the method call (necessary due to generics)
+// no additional error handling is required
func (m ModeMap[T]) Traverse(then func(in T) error) {
for enabled, mode := range m {
if !*enabled {
@@ -30,6 +40,8 @@ func (m ModeMap[T]) Traverse(then func(in T) error) {
}
}
+// statelessModes are program modes which do not require state to operate.
+// like --version and --completion
var statelessModes = ModeMap[func() error]{
flags.Version: func() error {
_, err := spool.Print("%s\n", version)
@@ -41,8 +53,7 @@ var statelessModes = ModeMap[func() error]{
},
}
-var Continue = errors.New("not an error; continue flow")
-
+// statefulModes are program modes which require a built state to be executed
var statefulModes = ModeMap[func(st *model.State) error]{
flags.List: func(st *model.State) error {
for _, s := range st.Sources {
@@ -55,6 +66,7 @@ var statefulModes = ModeMap[func(st *model.State) error]{
},
}
+// selectionModes are program modes which require a selected target, through menu or args
var selectionModes = ModeMap[func(st *model.State, src *model.Source, t model.Target) error]{
flags.Edit: func(st *model.State, src *model.Source, t model.Target) error {
return run.Edit(t, src)