diff --git a/v2/dimcli.go b/dimcli.go similarity index 100% rename from v2/dimcli.go rename to dimcli.go diff --git a/example/main.go b/example/main.go index 884390a..a6f1749 100644 --- a/example/main.go +++ b/example/main.go @@ -1,28 +1,38 @@ package main import ( - "github.com/roodletoof/dim-cli" - _ "embed" + "fmt" + + "git.roodletoof.org/roodletoof/dim-cli" ) -//go:embed main.go -var thisFile string - func main() { - dimcli.Help(thisFile) - var age = dimcli.GetPositional[int]() - var names = dimcli.GetKeyed( - "names", - []string{"Alice", "Bob"}, - ) - var printBar = dimcli.Flag("print-bar") - // HELP STOP + var cli = dimcli.NewCli() - println(age) - for _, name := range names { - println(name) + var fubar = cli.Flag("--fubar") + if fubar { + println("called with fubar flag") } - if printBar { - println("bar") + + if cli.Command("fu") { + f, err := cli.Float("--some-float") + if cli.Help { return } + + if err != nil { + fmt.Printf("err: %v\n", err) + return + } + fmt.Println(f) + } else if cli.Command("bar") { + i, err := cli.Int("--some-int") + if cli.Help { return } + if err != nil { + fmt.Printf("err: %v\n", err) + return + } + + fmt.Println(i) } + + if cli.Help { return } } diff --git a/go.mod b/go.mod index 008b56c..b49d858 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/roodletoof/dim-cli +module git.roodletoof.org/roodletoof/dim-cli go 1.24.5 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..e69de29 diff --git a/main.go b/main.go deleted file mode 100644 index 0ff40b8..0000000 --- a/main.go +++ /dev/null @@ -1,116 +0,0 @@ -package dimcli - -import ( - "slices" - "encoding/json" - "fmt" - "os" - "reflect" - "runtime" - "strings" -) - -// Help takes the string of the file that it is used (use the embed -// package), and searches for the text "HELP STOP" in the code. Then it prints -// the lines of code between. -func Help(stringOfThisFile string) { - if !slices.Contains(os.Args, "--help") { - return - } - println() - - var _, _, lineNumBegin, ok = runtime.Caller(1) - if !ok { - panic("could not get caller information") - } - var lines = strings.Split(stringOfThisFile, "\n") - for i := range lines { // platform independent - lines[i] = strings.TrimSuffix(lines[i], "\r") - } - lines = lines[lineNumBegin:] - for _, line := range lines { - if strings.Contains(line, "HELP STOP") { - break - } - println(line) - } - println() - os.Exit(0) -} - -var position = 1 -func GetPositional[T any]() (out T) { - var t = reflect.TypeFor[T]() - if len(os.Args) <= position { - var bytes, err = json.Marshal(out) - if err != nil { - panic( - fmt.Sprintf( - "type %s cannot be marshalled", - t.Name(), - ), - ) - } - panic( - fmt.Sprintf( - "missing positional arg %d of type %s\nexample: %s", - position, - t.Name(), - string(bytes), - ), - ) - } - - var err = json.Unmarshal([]byte(os.Args[position]), &out) - if err != nil { - panic( - fmt.Sprintf( - "failed parsing %s into arg %d of type %s", - os.Args[position], - position, - t.Name(), - ), - ) - } - - position++ - return out -} - -func GetKeyed[T any](name string, otherwise T) (out T) { - var key = fmt.Sprintf("--%s", name) - var index = 0 - for i, value := range os.Args { - if value == key { - index = i - break - } - } - if index == 0 { - return otherwise - } - if (index+1) >= len(os.Args) { - var t = reflect.TypeFor[T]() - - panic( - fmt.Sprintf( - "did not get value for keyed arg --%s.\nexpected value of type %s, kind %s", - name, - t.Name(), - t.Kind(), - ), - ) - } - var err = json.Unmarshal( - []byte(os.Args[index+1]), - &out, - ) - if err != nil { - panic(err.Error()) - } - return out -} - -func Flag(name string) bool { - return slices.Contains(os.Args, fmt.Sprintf("--%s", name)) -} diff --git a/v2/example/main.go b/v2/example/main.go deleted file mode 100644 index cce75c7..0000000 --- a/v2/example/main.go +++ /dev/null @@ -1,38 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/roodletoof/dim-cli/v2" -) - -func main() { - var cli = dimcli.NewCli() - - var fubar = cli.Flag("--fubar") - if fubar { - println("called with fubar flag") - } - - if cli.Command("fu") { - f, err := cli.Float("--some-float") - if cli.Help { return } - - if err != nil { - fmt.Printf("err: %v\n", err) - return - } - fmt.Println(f) - } else if cli.Command("bar") { - i, err := cli.Int("--some-int") - if cli.Help { return } - if err != nil { - fmt.Printf("err: %v\n", err) - return - } - - fmt.Println(i) - } - - if cli.Help { return } -}