Files
go-socket/packages/convertions/convertions.go
T

80 lines
1.6 KiB
Go

package convertions
import (
"errors"
"fmt"
"strconv"
"strings"
"time"
"go-socket/packages/types"
"github.com/google/uuid"
)
func StringToUint8(s string) (uint8, error) {
v, err := strconv.ParseUint(s, 10, 8)
return uint8(v), err
}
func StringToUint32(s string) (uint32, error) {
v, err := strconv.ParseUint(s, 10, 32)
return uint32(v), err
}
func StringToRgba(str string) (types.Rgba, error) {
parts := strings.SplitN(str, ",", 5)
if len(parts) != 4 {
return types.Rgba{}, fmt.Errorf("invalid rgba")
}
rgba := types.Rgba{}
for i, p := range parts {
n, err := strconv.ParseUint(strings.TrimSpace(p), 10, 8)
if err != nil {
return types.Rgba{}, fmt.Errorf("invalid component %d: %w", i, err)
}
rgba[i] = uint8(n)
}
return rgba, nil
}
func RgbaToUint32(r types.Rgba) uint32 {
return uint32(r[0])<<24 | uint32(r[1])<<16 | uint32(r[2])<<8 | uint32(r[3])
}
func Uint32ToRgba(v uint32) types.Rgba {
return types.Rgba{uint8(v >> 24), uint8(v >> 16), uint8(v >> 8), uint8(v)}
}
func StringToUuid(str string) (uuid.UUID, error) {
return uuid.Parse(str)
}
func StringToUuids(uuidStr string) ([]uuid.UUID, error) {
if uuidStr == "" {
return nil, errors.New("empty string")
}
parts := strings.Split(uuidStr, ",")
slice := make([]uuid.UUID, 0, len(parts))
for _, part := range parts {
id, err := StringToUuid(part)
if err != nil {
return nil, err
}
slice = append(slice, id)
}
return slice, nil
}
func StringToTimestamp(str string) (time.Time, error) {
return time.Parse(time.RFC3339, str)
}
func StringToBool(str string) bool {
return strings.ToLower(str) == "true"
}