github.com/amp-space/amp-sdk-go@v0.7.6/amp/uid.go (about) 1 package amp 2 3 import "github.com/google/uuid" 4 5 type UID [16]byte 6 7 var ( 8 NilUID = UID{} 9 DevicePlanet = FormUID(0, 0x01) 10 HostPlanet = FormUID(0, 0x02) 11 AppHomePlanet = FormUID(0, 0x03) 12 UserHomePlanet = FormUID(0, 0x04) 13 ) 14 15 // Forms an amp.UID explicitly from two uint64 values. 16 func FormUID(n0, n1 uint64) UID { 17 uid := UID{} 18 shift := uint(56) 19 for i := 0; i < 8; i++ { 20 uid[i+0] = byte(n0 >> shift) 21 uid[i+8] = byte(n1 >> shift) 22 shift -= 8 23 } 24 return uid 25 } 26 27 // ParseUID decodes s into a UID or returns an error. Accepted forms: 28 // - xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 29 // - urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 30 // - {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 31 // - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. 32 func ParseUID(s string) (UID, error) { 33 uid, err := uuid.Parse(s) 34 return UID(uid), err 35 } 36 37 // MustParseUID decodes s into a UID or panics -- see ParseUID(). 38 func MustParseUID(s string) UID { 39 uid := uuid.MustParse(s) 40 return UID(uid) 41 } 42 43 // String returns the string form of uid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx or "" if uuid is zero. 44 func (uid UID) String() string { 45 return uuid.UUID(uid).String() 46 }