From 65d273d0da5c1a742425e899f053bbee0fef0600 Mon Sep 17 00:00:00 2001 From: ewy Date: Sat, 2 May 2026 17:24:39 +0200 Subject: add docs --- modes.go | 16 ++++++++++++++-- 1 file 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) -- cgit v1.3.1