80 lines
1.6 KiB
Go
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"
|
|
}
|