blob: 7c2a7fd4d659c87bb51409900bcd91b24e2d3284 [file] [log] [blame]
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +04001package installer
2
3import (
4 "crypto/rand"
5 "fmt"
6)
7
Giorgi Lekveishvili6e813182023-06-30 13:45:30 +04008type SuffixGenerator interface {
9 Generate() (string, error)
10}
11
12type emptySuffixGenerator struct {
13}
14
15func NewEmptySuffixGenerator() SuffixGenerator {
16 return &emptySuffixGenerator{}
17}
18
19func (g *emptySuffixGenerator) Generate() (string, error) {
20 return "", nil
21}
22
Giorgi Lekveishvilia1e77902023-11-06 14:48:27 +040023type suffixGenerator struct {
24 suffix string
25}
26
27func NewSuffixGenerator(suffix string) SuffixGenerator {
28 return &suffixGenerator{suffix}
29}
30
31func (g *suffixGenerator) Generate() (string, error) {
32 return g.suffix, nil
33}
34
Giorgi Lekveishvili6e813182023-06-30 13:45:30 +040035type fixedLengthRandomSuffixGenerator struct {
36 len int
37}
38
39func NewFixedLengthRandomSuffixGenerator(len int) SuffixGenerator {
40 return &fixedLengthRandomSuffixGenerator{len}
41}
42
43var letters = []rune("abcdefghijklmnopqrstuvwxyz")
44
45func (g *fixedLengthRandomSuffixGenerator) Generate() (string, error) {
46 r := make([]byte, g.len)
47 if _, err := rand.Read(r); err != nil {
48 return "", err
49 }
50 ret := make([]rune, g.len)
51 for i, v := range r {
52 ret[i] += letters[v%26]
53 }
54 return fmt.Sprintf("-%s", string(ret)), nil
55}
56
Giorgi Lekveishvili7fb28bf2023-06-24 19:51:16 +040057type NamespaceGenerator interface {
58 Generate(name string) (string, error)
59}
60
61type prefixGenerator struct {
62 prefix string
63}
64
65func NewPrefixGenerator(prefix string) NamespaceGenerator {
66 return &prefixGenerator{prefix}
67}
68
69func (g *prefixGenerator) Generate(name string) (string, error) {
70 return g.prefix + name, nil
71}