-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathalias.go
50 lines (44 loc) · 1.25 KB
/
alias.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package alias
// AliasManager manages primary names and their aliases
type AliasManager struct {
primaryToAliases map[string][]string
aliasToPrimary map[string]string
}
// newAliasManager creates a new AliasManager
func newAliasManager() *AliasManager {
return &AliasManager{
primaryToAliases: make(map[string][]string),
aliasToPrimary: make(map[string]string),
}
}
// manager is the global instance of AliasManager
var manager = newAliasManager()
// RegisterAlias registers a primary name with its aliases
func RegisterAlias(primary string, aliases []string) {
manager.primaryToAliases[primary] = aliases
manager.aliasToPrimary[primary] = primary
for _, alias := range aliases {
manager.aliasToPrimary[alias] = primary
}
}
// GetPrimary returns the primary name for a given alias
func GetPrimary(alias string) string {
if primary, ok := manager.aliasToPrimary[alias]; ok {
return primary
}
return alias
}
// GetAllAliases returns all aliases for a given primary name
func GetAllAliases(primary string) []string {
if aliases, ok := manager.primaryToAliases[primary]; ok {
return aliases
}
return []string{}
}
func GetAllPrimary() []string {
res := make([]string, 0)
for k := range manager.primaryToAliases {
res = append(res, k)
}
return res
}