arche / internal/object/changeid.go

commit 154431fd
 1package object
 2
 3import (
 4	"crypto/rand"
 5	"fmt"
 6)
 7
 8const unambiguousAlphabet = "abcdefghjkmnpqrstvwxyz"
 9
10func NewChangeID(length int) string {
11	b := make([]byte, length)
12	_, err := rand.Read(b)
13	if err != nil {
14		panic(fmt.Sprintf("change ID: rand.Read failed: %v", err))
15	}
16	out := make([]byte, length)
17	al := byte(len(unambiguousAlphabet))
18	for i, byt := range b {
19		out[i] = unambiguousAlphabet[byt%al]
20	}
21	return string(out)
22}
23
24func FormatChangeID(id string) string {
25	return "ch:" + id
26}
27
28func StripChangeIDPrefix(id string) string {
29	if len(id) >= 3 && id[:3] == "ch:" {
30		return id[3:]
31	}
32	return id
33}