Initial QSfera import
This commit is contained in:
+66
@@ -0,0 +1,66 @@
|
||||
package structs
|
||||
|
||||
import "fmt"
|
||||
|
||||
// Aliases implemented a 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. if not exists, return the alias self
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user