Files
dependabot[bot] 0df009eae0 Bump github.com/gookit/config/v2 from 2.2.3 to 2.2.4
Bumps [github.com/gookit/config/v2](https://github.com/gookit/config) from 2.2.3 to 2.2.4.
- [Release notes](https://github.com/gookit/config/releases)
- [Commits](https://github.com/gookit/config/compare/v2.2.3...v2.2.4)

---
updated-dependencies:
- dependency-name: github.com/gookit/config/v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-03 10:26:28 +01:00

67 lines
1.4 KiB
Go

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
}