From 3c5a1acc0a01bb3cf4aa112b9842d33eece482eb Mon Sep 17 00:00:00 2001 From: James Riley Wilburn Date: Tue, 24 Sep 2024 10:07:12 -0400 Subject: [PATCH] add ParseTime --- configtype/time.go | 47 ++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/configtype/time.go b/configtype/time.go index 500aa0809f..279f6d6bce 100644 --- a/configtype/time.go +++ b/configtype/time.go @@ -40,6 +40,30 @@ func NewRelativeTime(d time.Duration) Time { } } +func ParseTime(s string) (Time, error) { + var t Time + var err error + switch { + case timeRFC3339Regexp.MatchString(s): + t.time, err = time.Parse(time.RFC3339, s) + if t.time.IsZero() { + t.typ = timeTypeZero + } else { + t.typ = timeTypeFixed + } + case dateRegexp.MatchString(s): + t.typ = timeTypeFixed + t.time, err = time.Parse(time.DateOnly, s) + case durationRegexp.MatchString(s): + t.typ = timeTypeRelative + t.duration, err = time.ParseDuration(s) + default: + return t, fmt.Errorf("invalid time format: %s", s) + } + + return t, err +} + var ( timeRFC3339Pattern = `^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(.(\d{1,9}))?(Z|((-|\+)\d{2}:\d{2}))$` timeRFC3339Regexp = regexp.MustCompile(timeRFC3339Pattern) @@ -60,29 +84,12 @@ func (Time) JSONSchema() *jsonschema.Schema { func (t *Time) UnmarshalJSON(b []byte) error { var s string - if err := json.Unmarshal(b, &s); err != nil { + err := json.Unmarshal(b, &s) + if err != nil { return err } - var err error - switch { - case timeRFC3339Regexp.MatchString(s): - t.time, err = time.Parse(time.RFC3339, s) - if t.time.IsZero() { - t.typ = timeTypeZero - } else { - t.typ = timeTypeFixed - } - case dateRegexp.MatchString(s): - t.typ = timeTypeFixed - t.time, err = time.Parse(time.DateOnly, s) - case durationRegexp.MatchString(s): - t.typ = timeTypeRelative - t.duration, err = time.ParseDuration(s) - default: - return fmt.Errorf("invalid time format: %s", s) - } - + *t, err = ParseTime(s) if err != nil { return err }