-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflags.go
73 lines (61 loc) · 1.65 KB
/
flags.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package main
import (
"errors"
"flag"
"fmt"
"strings"
"time"
)
var (
date, lang string
buy, sell float64
verbose, fresh bool
help, compare bool
currencies currencySlice
)
func validateFlags() error {
// Language validation
lang = strings.ToLower(lang)
switch lang {
case "en", "ru", "ro", "md":
default:
return errors.New("Invalid language \"" + lang + "\" provided")
}
// Date validation
switch strings.ToLower(date) {
case "yesterday", "yday", "yd", "yda":
date = time.Now().AddDate(0, 0, -1).Format(dateFormat)
}
// Buy,Sell validation
if buy < 0 || sell < 0 {
return errors.New("Negative numbers are not supported")
}
// Set default currency
if len(currencies) == 0 {
currencies = append(currencies, "USD")
}
return nil
}
func parseFlags() error {
flag.Parse()
err := validateFlags()
if err != nil {
fmt.Println(err)
flag.PrintDefaults()
}
if help {
flag.PrintDefaults()
}
return err
}
func init() {
flag.StringVar(&date, "d", time.Now().Format(dateFormat), "Date format: {dd.mm.yyyy} or {yesterday|yday|yd|yda}")
flag.StringVar(&lang, "l", "en", "Language: {en|md|ro|ru}")
flag.Float64Var(&buy, "buy", 0, "Calculate amount of MDL for each -c (currencies) bought")
flag.Float64Var(&sell, "sell", 0, "Calculate amount of MDL for each -c (currencies) sold")
flag.Var(¤cies, "c", "Comma separated list of currencies to display")
flag.BoolVar(&verbose, "v", false, "Display verbose output")
flag.BoolVar(&fresh, "f", false, "Skip reading cache and fetch fresh data")
flag.BoolVar(&help, "h", false, "Print usage")
flag.BoolVar(&compare, "x", false, "Cross reference rates to the day before -d")
}