in azkustodata/value/timespan.go [178:226]
func (t *Timespan) unmarshalSeconds(s string) (time.Duration, error) {
// "03" = 3 * time.Second
// "00.099" = 99 * time.Millisecond
// "03.0123" == 3 * time.Second + 12300 * time.Microsecond
sp := strings.Split(s, ".")
switch len(sp) {
case 1:
seconds, err := strconv.Atoi(s)
if err != nil {
return 0, fmt.Errorf("timespan's seconds field was incorrect, was %s", s)
}
return time.Duration(seconds) * time.Second, nil
case 2:
seconds, err := strconv.Atoi(sp[0])
if err != nil {
return 0, fmt.Errorf("timespan's seconds field was incorrect, was %s", s)
}
n, err := strconv.Atoi(sp[1])
if err != nil {
return 0, fmt.Errorf("timespan's seconds field was incorrect, was %s", s)
}
var prec time.Duration
switch len(sp[1]) {
case 1:
prec = time.Duration(n) * (100 * time.Millisecond)
case 2:
prec = time.Duration(n) * (10 * time.Millisecond)
case 3:
prec = time.Duration(n) * time.Millisecond
case 4:
prec = time.Duration(n) * 100 * time.Microsecond
case 5:
prec = time.Duration(n) * 10 * time.Microsecond
case 6:
prec = time.Duration(n) * time.Microsecond
case 7:
prec = time.Duration(n) * tick
case 8:
prec = time.Duration(n) * (10 * time.Nanosecond)
case 9:
prec = time.Duration(n) * time.Nanosecond
default:
return 0, fmt.Errorf("timespan's seconds field did not have 1-9 numbers after the decimal, had %v", s)
}
return time.Duration(seconds)*time.Second + prec, nil
}
return 0, fmt.Errorf("timespan's seconds field did not have the requisite '.'s, was %s", s)
}