package prep // this is a work in progress // Versioned is the interface that the destination struct should implement to // make a version string appear at the top of the help message. 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 } 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(*Auto) } 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 exitI interface { // Version returns the version string that will be printed on a line by itself // at the top of the help message. Exit() } // Described is the interface that the destination struct should implement to func findAppInfo(tmp interface{}) { if tmp, ok := tmp.(appnameI); ok { myAuto.appName = tmp.Appname() } else { panic("you must define in your app the function: (argv) func Appname() string") } if tmp, ok := tmp.(buildtimeI); ok { myAuto.buildtime = tmp.Buildtime } else { // panic("you need to make the function argv.Appname()") } if tmp, ok := tmp.(examplesI); ok { myAuto.examples = tmp.Examples } else { // panic("you need to make the function argv.Appname()") } if tmp, ok := tmp.(autoFuncI); ok { myAuto.autoFunc = tmp.DoAutoComplete } else { // panic("you need to make the function argv.DoAutoComplete()") } if tmp, ok := tmp.(exitI); ok { myAuto.appExit = tmp.Exit } else { // panic("you need to make the function argv.Exit()") } }