StoreBackEnd/pkg/protocol/RegexMatcher.go

45 lines
1.1 KiB
Go

package protocol
import "regexp"
// CreateRegexMatcher Création d'une instance de RegexMatcher
func CreateRegexMatcher(pattern string) *RegexMatcher {
compile, err := regexp.Compile(pattern)
if err != nil {
return nil
}
return &RegexMatcher{matcher: compile}
}
// RegexMatcher Propose des méthodes relatives au matching de chaine de caractère
type RegexMatcher struct {
matcher *regexp.Regexp
}
// Match Permet de vérifier la validité d'une donnée affiliée à un protocole
func (m RegexMatcher) Match(data string) bool {
return m.matcher.MatchString(data)
}
// Build Permet de construire une chaine respectant une commande. Retourne la chaine et bool (TRUE si correct et FALSE si incorrect)
func (m RegexMatcher) Build(cmd string, datas ...string) (string, bool) {
str := cmd
for _, data := range datas {
str += " " + data
}
str += "\r\n"
if m.Match(str) {
return str, true
} else {
return "", false
}
}
// Parse Permet de récupérer les différentes données de la chaine sur base du regex
func (m RegexMatcher) Parse(data string) []string {
return m.matcher.FindAllStringSubmatch(data, -1)[0]
}