aboutsummaryrefslogtreecommitdiff
path: root/internal/options
diff options
context:
space:
mode:
authorRasmus Dahlberg <rasmus@mullvad.net>2022-04-23 18:19:25 +0200
committerRasmus Dahlberg <rasmus@mullvad.net>2022-04-23 18:29:31 +0200
commit047500ae23a12469ce3e458c6a58a642716041b7 (patch)
treedd8ab39910e623ff756532bd892fb2f8d2e5fef6 /internal/options
parent4fc0ff2ec2f48519ee245d6d7edee1921cb3b8bc (diff)
add drafty tool named sigsum-debug
Meant to be used for debugging and tests only. Replaces cmd/tmp/* in log-go, expect for the DNS command which is redundant. Use `dig -t txt $domain_hint` to debug domain hints.
Diffstat (limited to 'internal/options')
-rw-r--r--internal/options/options.go65
1 files changed, 65 insertions, 0 deletions
diff --git a/internal/options/options.go b/internal/options/options.go
new file mode 100644
index 0000000..cc8e02a
--- /dev/null
+++ b/internal/options/options.go
@@ -0,0 +1,65 @@
+package options
+
+import (
+ "flag"
+ "fmt"
+)
+
+const (
+ DefaultString = "default string"
+ DefaultUint64 = 18446744073709551615
+)
+
+// New initializes a flag set using the provided arguments.
+//
+// - args should start with the (sub)command's name
+// - usage is a function that prints a usage message
+// - set is a function that sets the command's flag arguments
+//
+func New(args []string, usage func(), set func(*flag.FlagSet)) *flag.FlagSet {
+ if len(args) == 0 {
+ args = append(args, "")
+ }
+
+ fs := flag.NewFlagSet(args[0], flag.ExitOnError)
+ fs.Usage = func() {
+ usage()
+ }
+ set(fs)
+ fs.Parse(args[1:])
+ return fs
+}
+
+// AddString adds a string option to a flag set
+func AddString(fs *flag.FlagSet, opt *string, short, long, value string) {
+ fs.StringVar(opt, short, value, "")
+ fs.StringVar(opt, long, value, "")
+}
+
+// AdUint64 adds an uint64 option to a flag set
+func AddUint64(fs *flag.FlagSet, opt *uint64, short, long string, value uint64) {
+ fs.Uint64Var(opt, short, value, "")
+ fs.Uint64Var(opt, long, value, "")
+}
+
+// CheckString checks that a string option has a non-default value
+func CheckString(optionName, value string, err error) error {
+ if err != nil {
+ return err
+ }
+ if value == DefaultString {
+ return fmt.Errorf("%s is a required option", optionName)
+ }
+ return nil
+}
+
+// CheckUint checks that an uint64 option has a non-default value
+func CheckUint64(optionName string, value uint64, err error) error {
+ if err != nil {
+ return err
+ }
+ if value == DefaultUint64 {
+ return fmt.Errorf("%s is a required option", optionName)
+ }
+ return nil
+}