You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

52 lines
768 B

package generate
import (
"crypto/rand"
"encoding/hex"
"log"
"strings"
)
func id(prefix string, length int) string {
var id [16]byte
var buffer [32]byte
builder := strings.Builder{}
builder.Grow(length + 31)
builder.WriteString(prefix)
for builder.Len() < length {
_, err := rand.Read(id[:])
if err != nil {
log.Panicln("generate.id: failed to use OS random:", err)
}
hex.Encode(buffer[:], id[:])
builder.Write(buffer[:])
}
return builder.String()[:length]
}
func GroupID() string {
return id("G", 16)
}
func ItemID() string {
return id("I", 16)
}
func ProjectID() string {
return id("P", 16)
}
func TaskID() string {
return id("T", 16)
}
func LogID() string {
return id("L", 16)
}
func GoalID() string {
return id("A", 16)
}