117 lines
2.2 KiB
Go
117 lines
2.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"errors"
|
|
"strconv"
|
|
)
|
|
|
|
func OptionalBool(input *bool) bool {
|
|
if input == nil {
|
|
return false
|
|
}
|
|
|
|
return *input
|
|
}
|
|
|
|
func CreateOptionalBool(input bool) *bool {
|
|
if input == false {
|
|
return nil
|
|
}
|
|
|
|
return &input
|
|
}
|
|
|
|
// OptionalString converts a non-nil *string to the respective string or returns "".
|
|
func OptionalString(input *string) string {
|
|
if input == nil {
|
|
return ""
|
|
}
|
|
|
|
return *input
|
|
}
|
|
|
|
// OptionalInt converts a non-nil *int to the respective int, otherwise returns 0.
|
|
func OptionalInt(input *int) int {
|
|
if input == nil {
|
|
return 0
|
|
}
|
|
|
|
return *input
|
|
}
|
|
|
|
// CreateOptionalInt when given a zero value int (0), it returns a nil *int.
|
|
// Otherwise, it gives a proper *int with valid value.
|
|
func CreateOptionalInt(input int) *int {
|
|
if input == 0 {
|
|
return nil
|
|
}
|
|
|
|
return &input
|
|
}
|
|
|
|
// CreateOptionalString when given an empty string, it returns a nil *string.
|
|
// Otherwise, it gives a proper *string with valid value.
|
|
func CreateOptionalString(input string) *string {
|
|
if input == "" {
|
|
return nil
|
|
}
|
|
|
|
return &input
|
|
}
|
|
|
|
// GetNumberFromString converts a string to a number.
|
|
// Returns error if the query is not a number.
|
|
func GetNumberFromString(input string) (int, error) {
|
|
for _, c := range input {
|
|
if c < '0' || c > '9' {
|
|
return 0, errors.New("invalid input")
|
|
}
|
|
}
|
|
|
|
idAsInt, err := strconv.Atoi(input)
|
|
if err != nil || idAsInt <= 0 {
|
|
return 0, errors.New("invalid input")
|
|
}
|
|
|
|
return idAsInt, nil
|
|
}
|
|
|
|
type Number interface {
|
|
int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | float32 | float64
|
|
}
|
|
|
|
// OptionalNumber converts a non-nil *NUMBER to the respective number value or returns 0.
|
|
func OptionalNumber[T Number](input *T) T {
|
|
if input == nil {
|
|
return 0
|
|
}
|
|
|
|
return *input
|
|
}
|
|
|
|
// CreateOptionalNumber when given an zero value NUMBER (0), it returns a nil *NUMBER, otherwise, it gives a proper *NUMBER with valid value.
|
|
func CreateOptionalNumber[T Number](input T) *T {
|
|
if input == 0 {
|
|
return nil
|
|
}
|
|
|
|
return &input
|
|
}
|
|
|
|
func IntToInt64Pointer(input *int) *int64 {
|
|
if input == nil {
|
|
return nil
|
|
}
|
|
val := int64(*input)
|
|
return &val
|
|
}
|
|
|
|
func NumberToNumberPointer[T Number, Y Number](input *T) *Y {
|
|
if input == nil {
|
|
return nil
|
|
}
|
|
|
|
val := Y(*input)
|
|
return &val
|
|
}
|