in azkustodata/value/timespan.go [79:136]
func (t *Timespan) Unmarshal(i interface{}) error {
const (
hoursIndex = 0
minutesIndex = 1
secondsIndex = 2
)
if i == nil {
t.value = nil
return nil
}
v, ok := i.(string)
if !ok {
return convertError(t, i)
}
negative := false
if len(v) > 1 {
if string(v[0]) == "-" {
negative = true
v = v[1:]
}
}
sp := strings.Split(v, ":")
if len(sp) != 3 {
return parseError(v, sp, fmt.Errorf("value to unmarshal into Timespan does not seem to fit format '00:00:00', where values are decimal(%s)", v))
}
var sum time.Duration
d, err := t.unmarshalDaysHours(sp[hoursIndex])
if err != nil {
return parseError(v, sp, err)
}
sum += d
d, err = t.unmarshalMinutes(sp[minutesIndex])
if err != nil {
return parseError(v, sp, err)
}
sum += d
d, err = t.unmarshalSeconds(sp[secondsIndex])
if err != nil {
return parseError(v, sp, err)
}
sum += d
if negative {
sum = sum * time.Duration(-1)
}
t.value = &sum
return nil
}