/* * SPDX-FileCopyrightText: 2023 jordi fita mas * SPDX-License-Identifier: AGPL-3.0-only */ package uuid import ( gohex "encoding/hex" "fmt" "dev.tandem.ws/tandem/camper/pkg/hex" ) func Valid(s string) bool { if len(s) != 36 { return false } // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' { return false } for _, x := range [16]int{ 0, 2, 4, 6, 9, 11, 14, 16, 19, 21, 24, 26, 28, 30, 32, 34} { if !hex.Valid(s[x], s[x+1]) { return false } } return true } func Parse(src string) (dst [16]byte, err error) { switch len(src) { case 36: src = src[0:8] + src[9:13] + src[14:18] + src[19:23] + src[24:] case 32: // dashes already stripped, assume valid default: // assume invalid. return dst, fmt.Errorf("cannot parse UUID %v", src) } buf, err := gohex.DecodeString(src) if err != nil { return dst, err } copy(dst[:], buf) return dst, err }