github.com/glide-im/glide@v1.6.0/pkg/gate/id.go (about)

     1  package gate
     2  
     3  import (
     4  	"encoding/hex"
     5  	"io"
     6  	"math/rand"
     7  	"time"
     8  )
     9  
    10  // GenTempID generates a temporary ID.
    11  // ID implementation is a UUID v4, which is generated by random number generator.
    12  func GenTempID(gateID string) (ID, error) {
    13  	uuid, err := newUUID()
    14  	if err != nil {
    15  		return "", err
    16  	}
    17  	return NewID(gateID, tempIdPrefix+uuid, ""), nil
    18  }
    19  
    20  func newUUID() (string, error) {
    21  	var uuid [16]byte
    22  	r := rand.New(rand.NewSource(time.Now().UnixNano()))
    23  	_, err := io.ReadFull(r, uuid[:])
    24  	if err != nil {
    25  		return "", err
    26  	}
    27  	uuid[6] = (uuid[6] & 0x0f) | 0x40
    28  	uuid[8] = (uuid[8] & 0x3f) | 0x80
    29  
    30  	var buf1 [36]byte
    31  	buf := buf1[:]
    32  	hex.Encode(buf, uuid[:4])
    33  	buf[8] = '-'
    34  	hex.Encode(buf[9:13], uuid[4:6])
    35  	buf[13] = '-'
    36  	hex.Encode(buf[14:18], uuid[6:8])
    37  	buf[18] = '-'
    38  	hex.Encode(buf[19:23], uuid[8:10])
    39  	buf[23] = '-'
    40  	hex.Encode(buf[24:], uuid[10:])
    41  	return string(buf[:]), nil
    42  }