| package installer |
| |
| import ( |
| "crypto/rand" |
| "fmt" |
| ) |
| |
| type SuffixGenerator interface { |
| Generate() (string, error) |
| } |
| |
| type emptySuffixGenerator struct { |
| } |
| |
| func NewEmptySuffixGenerator() SuffixGenerator { |
| return &emptySuffixGenerator{} |
| } |
| |
| func (g *emptySuffixGenerator) Generate() (string, error) { |
| return "", nil |
| } |
| |
| type fixedLengthRandomSuffixGenerator struct { |
| len int |
| } |
| |
| func NewFixedLengthRandomSuffixGenerator(len int) SuffixGenerator { |
| return &fixedLengthRandomSuffixGenerator{len} |
| } |
| |
| var letters = []rune("abcdefghijklmnopqrstuvwxyz") |
| |
| func (g *fixedLengthRandomSuffixGenerator) Generate() (string, error) { |
| r := make([]byte, g.len) |
| if _, err := rand.Read(r); err != nil { |
| return "", err |
| } |
| ret := make([]rune, g.len) |
| for i, v := range r { |
| ret[i] += letters[v%26] |
| } |
| return fmt.Sprintf("-%s", string(ret)), nil |
| } |
| |
| type NamespaceGenerator interface { |
| Generate(name string) (string, error) |
| } |
| |
| type prefixGenerator struct { |
| prefix string |
| } |
| |
| func NewPrefixGenerator(prefix string) NamespaceGenerator { |
| return &prefixGenerator{prefix} |
| } |
| |
| func (g *prefixGenerator) Generate(name string) (string, error) { |
| return g.prefix + name, nil |
| } |