func ParseDuration(cand string) (time.Duration, error) {
	if dur, err := time.ParseDuration(cand); err == nil {
		return dur, nil
	}

	var dur time.Duration
	ok := false
	for _, match := range durationMatcher.FindAllStringSubmatch(cand, -1) {

		factor, err := strconv.Atoi(match[2]) // converts string to int
		if err != nil {
			return 0, err
		}
		unit := strings.ToLower(strings.TrimSpace(match[3]))

		for _, variants := range timeUnits {
			last := len(variants) - 1
			multiplier := timeMultiplier[variants[0]]

			for i, variant := range variants {
				if (last == i && strings.HasPrefix(unit, variant)) || strings.EqualFold(variant, unit) {
					ok = true
					dur += (time.Duration(factor) * multiplier)
				}
			}
		}
	}

	if ok {
		return dur, nil
	}
	return 0, fmt.Errorf("unable to parse %s as duration", cand)
}
func ParseDuration(cand string) (time.Duration, error) {
	if dur, err := time.ParseDuration(cand); err == nil {
		return dur, nil
	}

	var dur time.Duration
	ok := false
	for _, match := range durationMatcher.FindAllStringSubmatch(cand, -1) {

		factor, err := strconv.Atoi(match[2]) 
		if err != nil {
			return 0, err
		}
		unit := strings.ToLower(strings.TrimSpace(match[3]))

		for _, variants := range timeUnits {
			last := len(variants) - 1
			multiplier := timeMultiplier[variants[0]]

			for i, variant := range variants {
				if (last == i && strings.HasPrefix(unit, variant)) || strings.EqualFold(variant, unit) {
					ok = true
					dur += (time.Duration(factor) * multiplier)
				}
			}
		}
	}

	if ok {
		return dur, nil
	}
	return 0, fmt.Errorf("unable to parse %s as duration", cand)
}
func ParseDuration ( cand string ) ( time . Duration , error ) { if dur , err := time . ParseDuration ( cand ) ; err == nil { return dur , nil } var dur time . Duration ok := false for _ , match := range durationMatcher . FindAllStringSubmatch ( cand , - 1 ) { factor , err := strconv . Atoi ( match [ 2 ] ) // converts string to int if err != nil { return 0 , err } unit := strings . ToLower ( strings . TrimSpace ( match [ 3 ] ) ) for _ , variants := range timeUnits { last := len ( variants ) - 1 multiplier := timeMultiplier [ variants [ 0 ] ] for i , variant := range variants { if ( last == i && strings . HasPrefix ( unit , variant ) ) || strings . EqualFold ( variant , unit ) { ok = true dur += ( time . Duration ( factor ) * multiplier ) } } } } if ok { return dur , nil } return 0 , fmt . Errorf ( " " , cand ) }
// ParseDuration parses a duration from a string, compatible with scala duration syntax
ParseDuration parses a duration from a string compatible with scala duration syntax