forked from gookit/goutil
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalias.go
67 lines (55 loc) · 1.37 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package structs
import "fmt"
// Aliases implemented an simple string alias map.
type Aliases struct {
mapping map[string]string
// Checker custom add alias name checker func
Checker func(alias string) // should return bool OR error ??
}
// NewAliases create
func NewAliases(checker func(alias string)) *Aliases {
return &Aliases{Checker: checker}
}
// AddAlias to the Aliases
func (as *Aliases) AddAlias(real, alias string) {
if as.mapping == nil {
as.mapping = make(map[string]string)
}
if as.Checker != nil {
as.Checker(alias)
}
if rn, ok := as.mapping[alias]; ok {
panic(fmt.Sprintf("The alias '%s' is already used by '%s'", alias, rn))
}
as.mapping[alias] = real
}
// AddAliases to the Aliases
func (as *Aliases) AddAliases(real string, aliases []string) {
for _, a := range aliases {
as.AddAlias(real, a)
}
}
// AddAliasMap to the Aliases
func (as *Aliases) AddAliasMap(alias2real map[string]string) {
for a, r := range alias2real {
as.AddAlias(r, a)
}
}
// HasAlias in the Aliases
func (as *Aliases) HasAlias(alias string) bool {
if _, ok := as.mapping[alias]; ok {
return true
}
return false
}
// ResolveAlias by given name.
func (as *Aliases) ResolveAlias(alias string) string {
if name, ok := as.mapping[alias]; ok {
return name
}
return alias
}
// Mapping get all aliases mapping
func (as *Aliases) Mapping() map[string]string {
return as.mapping
}