summaryrefslogtreecommitdiff
path: root/verifyApplication.go
diff options
context:
space:
mode:
Diffstat (limited to 'verifyApplication.go')
-rw-r--r--verifyApplication.go231
1 files changed, 231 insertions, 0 deletions
diff --git a/verifyApplication.go b/verifyApplication.go
new file mode 100644
index 0000000..dba5b65
--- /dev/null
+++ b/verifyApplication.go
@@ -0,0 +1,231 @@
+package argvpb
+
+import (
+ "go.wit.com/log"
+)
+
+// verify the application has the needed function calls defined
+func verifyApplication(tmp interface{}) {
+ // START NEEDED FUNCS // 2025/10/18 (review in a few months)
+ if tmp, ok := tmp.(initArgvI); ok {
+ me.initArgvFunc = tmp.InitArgv
+ } else {
+ panic("you must define in your app the function: (args) func InitArgv() (string, string, string)")
+ }
+
+ if tmp, ok := tmp.(mustParseI); ok {
+ me.mustParseFunc = tmp.MustParse
+ } else {
+ panic("you must define in your app the function: func (args) MustParse() error")
+ }
+
+ if tmp, ok := tmp.(writeHelpForAutocompleteI); ok {
+ me.writeHelpForAutocompleteFunc = tmp.WriteHelpForAutocomplete
+ } else {
+ helpWriteHelpForAutocomplete()
+ }
+
+ if tmp, ok := tmp.(writeHelpForAutocompleteDebugI); ok {
+ me.writeHelpForAutocompleteDebugFunc = tmp.WriteHelpForAutocompleteDebug
+ } else {
+ helpWriteHelpForAutocompleteDebug()
+ }
+
+ if tmp, ok := tmp.(writeHelpForSubcommandI); ok {
+ me.writeHelpForSubcommandFunc = tmp.WriteHelpForSubcommand
+ } else {
+ helpWriteHelpForSubcommand()
+ }
+
+ if tmp, ok := tmp.(writeHelpI); ok {
+ me.writeHelpFunc = tmp.WriteHelp
+ } else {
+ helpWriteHelp()
+ }
+
+ if tmp, ok := tmp.(parseFlagsI); ok {
+ me.parseFlagsFunc = tmp.ParseFlags
+ } else {
+ parseFlagsHelp()
+ }
+
+ if tmp, ok := tmp.(initGuiI); ok {
+ me.initGuiFunc = tmp.InitGui
+ if err := tmp.InitGui(); err != nil {
+ log.Info("go.wit.com/gui failed to initialize", err)
+ panic("gui failed to init")
+ }
+ } else {
+ // panic("you must add this function to argv.go: (argv) func InitGui() error")
+ }
+ // END NEEDED FUNCS // 2025/10/18 (review in a few months)
+
+ // TODO: SORT OUT STUFF BELOW HERE
+ if tmp, ok := tmp.(appnameI); ok {
+ me.ARGNAME = tmp.Appname()
+ } else {
+ // panic("you must define in your app the function: (argv) func Appname() string")
+ }
+
+ if tmp, ok := tmp.(examplesI); ok {
+ me.examples = tmp.Examples
+ }
+ if tmp, ok := tmp.(autoFuncI); ok {
+ me.autoFunc = tmp.DoAutoComplete
+ } else {
+ // panic("you need to make the function argv.DoAutoComplete()")
+ }
+
+ if tmp, ok := tmp.(sendCompletionStringsI); ok {
+ me.autoFunc = tmp.SendCompletionStrings
+ } else {
+ // panic("you need to make the function argv.DoAutoComplete()")
+ }
+
+ if tmp, ok := tmp.(exitI); ok {
+ me.appExit = tmp.Exit
+ } else {
+ // panic("you need to make the function argv.Exit()")
+ }
+}
+
+// WORKING ON START
+
+type initArgvI interface {
+ InitArgv() (string, string, string)
+}
+
+type mustParseI interface {
+ MustParse() error
+}
+
+type parseFlagsI interface {
+ ParseFlags([]string) error
+}
+
+type writeHelpForAutocompleteI interface {
+ WriteHelpForAutocomplete(string, ...string) error
+}
+
+type writeHelpForAutocompleteDebugI interface {
+ WriteHelpForAutocompleteDebug(string, ...string) error
+}
+
+type writeHelpForSubcommandI interface {
+ WriteHelpForSubcommand(cmd string) error
+}
+
+type writeHelpI interface {
+ WriteHelp() error
+}
+
+type initGuiI interface {
+ // Version returns the version string that will be printed on a line by itself
+ // at the top of the help message.
+ InitGui() error
+}
+
+// WORKING ON END
+
+// NOTSURE ABOUT START
+type appnameI interface {
+ // Version returns the version string that will be printed on a line by itself
+ // at the top of the help message.
+ Appname() string
+}
+
+// deprecate
+type autoFuncI interface {
+ // Version returns the version string that will be printed on a line by itself
+ // at the top of the help message.
+ DoAutoComplete(*Argv)
+}
+
+type sendCompletionStringsI interface {
+ // Version returns the version string that will be printed on a line by itself
+ // at the top of the help message.
+ SendCompletionStrings(*Argv)
+}
+
+type buildtimeI interface {
+ Buildtime() (string, string)
+}
+
+type examplesI interface {
+ // Version returns the version string that will be printed on a line by itself
+ // at the top of the help message.
+ Examples() string
+}
+
+type guiI interface {
+ // Version returns the version string that will be printed on a line by itself
+ // at the top of the help message.
+ ArgvGui() error
+}
+
+type exitI interface {
+ // allows a custom app Exit()
+ Exit()
+}
+
+func helpWriteHelpForSubcommand() {
+ log.Info("")
+ log.Info("// add this funcgion: this will print the help")
+ log.Info("func (args) WriteHelpForSubcommand() error {")
+ log.Info(" me.pp.WriteHelpForSubcommand(os.Stderr, me.argv.Cmd)")
+ log.Info(" return nil")
+ log.Info("}")
+ log.Info("")
+ log.Info("cp ~/go/src/go.wit.com/apps/forge/argv.template.go .")
+ panic("copy the argv.template.go file from forge")
+}
+
+func helpWriteHelp() {
+ log.Info("")
+ log.Info("// add this funcgion: this will print the help")
+ log.Info("func (args) WriteHelp() error {")
+ log.Info(" me.pp.WriteHelp(os.Stderr)")
+ log.Info(" return nil")
+ log.Info("}")
+ log.Info("")
+
+ panic("best to just copy the argv.template.go file from forge")
+}
+
+func helpWriteHelpForAutocompleteDebug() {
+ log.Info("")
+ log.Info("// this will print the help for the subcmd")
+ log.Info("func (args) WriteHelpForAutocompleteDebug(part string, subcmd ...string) error {")
+ log.Info(" return argvpp.WriteHelpForAutocomplete(f, os.Stdout, part, subcmd...)")
+ log.Info("}")
+ log.Info("")
+ log.Info("cp ~/go/src/go.wit.com/apps/forge/argv.template.go .")
+
+ panic("best to just copy the argv.template.go file from forge")
+}
+
+// func (p *Parser) WriteHelpForAutocomplete(stderr io.Writer, stdout io.Writer, partial string, subcommand ...string) error {
+// me.pp.WriteHelpForAutocomplete(os.Stderr, os.Stdout, partial, cmd...)
+func helpWriteHelpForAutocomplete() {
+ log.Info("")
+ log.Info("// this will print the help for the subcmd")
+ log.Info("func (args) WriteHelpForAutocomplete(part string, subcmd ...string) error {")
+ log.Info(" return argvpp.WriteHelpForAutocomplete(os.Stderr, os.Stdout, part, subcmd...)")
+ log.Info("}")
+ log.Info("")
+ log.Info("Just copy the argv.template.go file from forge")
+ log.Info("")
+
+ panic("you must define this function in your application code")
+}
+
+func parseFlagsHelp() {
+ log.Info("")
+ log.Info("// this function will send the current argv PB to go-args for parsing")
+ log.Info("func (args) ParseFlags(flags []string) error {")
+ log.Info(" arg.ParseFlags(flags)")
+ log.Info("}")
+ log.Info("")
+
+ panic("you must define in your app the function: func (args) ParseFlags([]string) error")
+}