...
1 package utils
2
3 import (
4 "flag"
5 "fmt"
6 "sort"
7 "strings"
8 )
9
10
11 func FlagStrings(name, help string, values map[string]string) *flag_string_t {
12 t := &flag_string_t{name: name, help: help, values: values}
13 var vals []string
14 for k, _ := range values {
15 vals = append(vals, k)
16 }
17 sort.Slice(vals, func(i, j int) bool {
18 return vals[i] < vals[j]
19 })
20 s := " [" + strings.Join(vals, "|") + "]"
21 flag.Var(t, name, help+s)
22 return t
23 }
24
25 type flag_string_t struct {
26 name string
27 help string
28 values map[string]string
29 value string
30 }
31
32 func (f *flag_string_t) Set(s string) error {
33 for k, _ := range f.values {
34 if k == s {
35 f.value = s
36 return nil
37 }
38 }
39 return fmt.Errorf("not a valid flag value \"%s\" for -%s.", s, f.name)
40 }
41 func (f *flag_string_t) String() string {
42 return f.name
43 }
44
View as plain text