summaryrefslogtreecommitdiff
path: root/vendor/github.com/spf13/cast/time.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/spf13/cast/time.go')
-rw-r--r--vendor/github.com/spf13/cast/time.go116
1 files changed, 0 insertions, 116 deletions
diff --git a/vendor/github.com/spf13/cast/time.go b/vendor/github.com/spf13/cast/time.go
deleted file mode 100644
index 744cd5acc..000000000
--- a/vendor/github.com/spf13/cast/time.go
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright © 2014 Steve Francia <spf@spf13.com>.
-//
-// Use of this source code is governed by an MIT-style
-// license that can be found in the LICENSE file.
-
-package cast
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "strings"
- "time"
-
- "github.com/spf13/cast/internal"
-)
-
-// ToTimeE any value to a [time.Time] type.
-func ToTimeE(i any) (time.Time, error) {
- return ToTimeInDefaultLocationE(i, time.UTC)
-}
-
-// ToTimeInDefaultLocationE casts an empty interface to [time.Time],
-// interpreting inputs without a timezone to be in the given location,
-// or the local timezone if nil.
-func ToTimeInDefaultLocationE(i any, location *time.Location) (tim time.Time, err error) {
- i, _ = indirect(i)
-
- switch v := i.(type) {
- case time.Time:
- return v, nil
- case string:
- return StringToDateInDefaultLocation(v, location)
- case json.Number:
- // Originally this used ToInt64E, but adding string float conversion broke ToTime.
- // the behavior of ToTime would have changed if we continued using it.
- // For now, using json.Number's own Int64 method should be good enough to preserve backwards compatibility.
- v = json.Number(trimZeroDecimal(string(v)))
- s, err1 := v.Int64()
- if err1 != nil {
- return time.Time{}, fmt.Errorf(errorMsg, i, i, time.Time{})
- }
- return time.Unix(s, 0), nil
- case int:
- return time.Unix(int64(v), 0), nil
- case int32:
- return time.Unix(int64(v), 0), nil
- case int64:
- return time.Unix(v, 0), nil
- case uint:
- return time.Unix(int64(v), 0), nil
- case uint32:
- return time.Unix(int64(v), 0), nil
- case uint64:
- return time.Unix(int64(v), 0), nil
- case nil:
- return time.Time{}, nil
- default:
- return time.Time{}, fmt.Errorf(errorMsg, i, i, time.Time{})
- }
-}
-
-// ToDurationE casts any value to a [time.Duration] type.
-func ToDurationE(i any) (time.Duration, error) {
- i, _ = indirect(i)
-
- switch s := i.(type) {
- case time.Duration:
- return s, nil
- case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
- v, err := ToInt64E(s)
- if err != nil {
- // TODO: once there is better error handling, this should be easier
- return 0, errors.New(strings.ReplaceAll(err.Error(), " int64", "time.Duration"))
- }
-
- return time.Duration(v), nil
- case float32, float64, float64EProvider, float64Provider:
- v, err := ToFloat64E(s)
- if err != nil {
- // TODO: once there is better error handling, this should be easier
- return 0, errors.New(strings.ReplaceAll(err.Error(), " float64", "time.Duration"))
- }
-
- return time.Duration(v), nil
- case string:
- if !strings.ContainsAny(s, "nsuµmh") {
- return time.ParseDuration(s + "ns")
- }
-
- return time.ParseDuration(s)
- case nil:
- return time.Duration(0), nil
- default:
- if i, ok := resolveAlias(i); ok {
- return ToDurationE(i)
- }
-
- return 0, fmt.Errorf(errorMsg, i, i, time.Duration(0))
- }
-}
-
-// StringToDate attempts to parse a string into a [time.Time] type using a
-// predefined list of formats.
-//
-// If no suitable format is found, an error is returned.
-func StringToDate(s string) (time.Time, error) {
- return internal.ParseDateWith(s, time.UTC, internal.TimeFormats)
-}
-
-// StringToDateInDefaultLocation casts an empty interface to a [time.Time],
-// interpreting inputs without a timezone to be in the given location,
-// or the local timezone if nil.
-func StringToDateInDefaultLocation(s string, location *time.Location) (time.Time, error) {
- return internal.ParseDateWith(s, location, internal.TimeFormats)
-}