package main import ( "fmt" "regexp" "strconv" "time" ) func duration(s string) (time.Duration, error) { re := regexp.MustCompile(`^(\d+)([HhDdMmYy])$`) if m := re.FindStringSubmatch(s); m != nil { v, err := strconv.ParseUint(m[1], 10, 0) if err != nil { return 0, err } switch m[2] { case "H", "h": return time.Hour * time.Duration(v), nil case "D", "d": return time.Hour * time.Duration(24*v), nil case "M", "m": return time.Hour * time.Duration(24*30*v), nil case "Y", "y": return time.Hour * time.Duration(24*365*v), nil } } return 0, fmt.Errorf("unrecognized time spec '%s'", s) } func uniq(l []string) []string { seen := make(map[string] bool) u := make([]string, 0) for _, s := range l { if !seen[s] { u = append(u, s) } seen[s] = true } return u }