Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 16 additions & 13 deletions cast.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
// Package cast provides easy and safe casting in Go.
package cast

import "time"
import (
"strconv"
"time"
)

const errorMsg = "unable to cast %#v of type %T to %T"
const errorMsgWith = "unable to cast %#v of type %T to %T: %w"
Expand All @@ -31,29 +34,29 @@ func ToE[T Basic](i any) (T, error) {
case bool:
v, err = ToBoolE(i)
case int:
v, err = toNumberE[int](i, parseInt[int])
v, err = toSignedNumberE[int](i, parseInt[int](0, strconv.IntSize))
case int8:
v, err = toNumberE[int8](i, parseInt[int8])
v, err = toSignedNumberE[int8](i, parseInt[int8](0, 8))
case int16:
v, err = toNumberE[int16](i, parseInt[int16])
v, err = toSignedNumberE[int16](i, parseInt[int16](0, 16))
case int32:
v, err = toNumberE[int32](i, parseInt[int32])
v, err = toSignedNumberE[int32](i, parseInt[int32](0, 32))
case int64:
v, err = toNumberE[int64](i, parseInt[int64])
v, err = toSignedNumberE[int64](i, parseInt[int64](0, 64))
case uint:
v, err = toUnsignedNumberE[uint](i, parseUint[uint])
v, err = toUnsignedNumberE[uint](i, parseUint[uint](0, strconv.IntSize))
case uint8:
v, err = toUnsignedNumberE[uint8](i, parseUint[uint8])
v, err = toUnsignedNumberE[uint8](i, parseUint[uint8](0, 8))
case uint16:
v, err = toUnsignedNumberE[uint16](i, parseUint[uint16])
v, err = toUnsignedNumberE[uint16](i, parseUint[uint16](0, 16))
case uint32:
v, err = toUnsignedNumberE[uint32](i, parseUint[uint32])
v, err = toUnsignedNumberE[uint32](i, parseUint[uint32](0, 32))
case uint64:
v, err = toUnsignedNumberE[uint64](i, parseUint[uint64])
v, err = toUnsignedNumberE[uint64](i, parseUint[uint64](0, 64))
case float32:
v, err = toNumberE[float32](i, parseFloat[float32])
v, err = toSignedNumberE[float32](i, parseFloat[float32])
case float64:
v, err = toNumberE[float64](i, parseFloat[float64])
v, err = toSignedNumberE[float64](i, parseFloat[float64])
case time.Time:
v, err = ToTimeE(i)
case time.Duration:
Expand Down
Loading