Improve error handling for duration parsing

This commit is contained in:
Julian Kornberger 2018-01-02 09:50:00 +01:00
parent f423da31d2
commit f852578b11
2 changed files with 6 additions and 5 deletions

View File

@ -4,6 +4,8 @@ import (
"fmt"
"strconv"
"time"
"github.com/pkg/errors"
)
// Duration is a TOML datatype
@ -32,7 +34,7 @@ func (d *Duration) UnmarshalTOML(dataInterface interface{}) error {
unit := data[len(data)-1]
value, err := strconv.Atoi(string(data[:len(data)-1]))
if err != nil {
return fmt.Errorf("unable to parse duration %s: %s", data, err)
return errors.Wrapf(err, "unable to parse duration \"%s\"", data)
}
switch unit {
@ -49,7 +51,7 @@ func (d *Duration) UnmarshalTOML(dataInterface interface{}) error {
case 'y':
d.Duration = time.Duration(value) * time.Hour * 24 * 365
default:
return fmt.Errorf("invalid duration unit: %s", string(unit))
return fmt.Errorf("invalid duration unit \"%s\"", string(unit))
}
return nil

View File

@ -16,7 +16,7 @@ func TestDuration(t *testing.T) {
duration time.Duration
}{
{"", "invalid duration: \"\"", 0},
{"1x", "invalid duration unit: x", 0},
{"1x", "invalid duration unit \"x\"", 0},
{"1s", "", time.Second},
{"73s", "", time.Second * 73},
{"1m", "", time.Minute},
@ -52,6 +52,5 @@ func TestDuration(t *testing.T) {
err = d.UnmarshalTOML("am")
assert.Error(err)
assert.Contains(err.Error(), "unable to parse duration")
assert.EqualError(err, "unable to parse duration \"am\": strconv.Atoi: parsing \"a\": invalid syntax")
}