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 StringToUuidSlice(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) }