new and improved Resolver.

This commit is contained in:
2022-08-15 21:14:11 +02:00
parent c38d881058
commit 6eb03b2e44
8 changed files with 191 additions and 172 deletions
+5
View File
@@ -0,0 +1,5 @@
package device
type Resolver interface {
Resolve(pattern string) []Pointer
}
+65
View File
@@ -0,0 +1,65 @@
package device
import (
"strings"
)
type PointerMatcher interface {
Match(str string) bool
}
type Pointer struct {
ID string `json:"id"`
Aliases []string `json:"aliases"`
}
func (p *Pointer) AddAlias(alias string) {
if strings.HasPrefix(alias, "lucifer:name:") {
for i, alias2 := range p.Aliases {
if strings.HasPrefix(alias2, "lucifer:name:") {
p.Aliases = append(p.Aliases[:i], p.Aliases[i+1:]...)
break
}
}
}
for _, alias2 := range p.Aliases {
if alias2 == alias {
return
}
}
p.Aliases = append(p.Aliases, alias)
}
func (p *Pointer) RemoveAlias(alias string) {
for i, alias2 := range p.Aliases {
if alias2 == alias {
p.Aliases = append(p.Aliases[:i], p.Aliases[i+1:]...)
break
}
}
}
func (p *Pointer) Name() string {
for _, alias := range p.Aliases {
if strings.HasPrefix(alias, "lucifer:name:") {
return alias
}
}
return ""
}
func (p *Pointer) Matches(matcher PointerMatcher) bool {
if matcher.Match(p.ID) {
return true
}
for _, alias := range p.Aliases {
if matcher.Match(alias) {
return true
}
}
return false
}