github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/ev/contains/in_strings.go (about) 1 package contains 2 3 import "github.com/emirpasic/gods/sets/hashset" 4 5 // InStrings checks existing value in set of strings 6 type InStrings interface { 7 Contains(value string) bool 8 } 9 10 // NewInStringsFromArray instantiates InStrings based on []string 11 func NewInStringsFromArray(elements []string) InStrings { 12 var maxLen = 0 13 setElements := make([]interface{}, len(elements)) 14 for i, element := range elements { 15 currentLen := len(element) 16 if currentLen > maxLen { 17 maxLen = currentLen 18 } 19 setElements[i] = element 20 } 21 22 return NewInStrings(NewSet(hashset.New(setElements...)), maxLen) 23 } 24 25 // NewInStrings instantiates InStrings based on InSet 26 func NewInStrings(contains InSet, maxLen int) InStrings { 27 return inStrings{contains, maxLen} 28 } 29 30 type inStrings struct { 31 contains InSet 32 maxLen int 33 } 34 35 func (is inStrings) Contains(value string) bool { 36 var maxLen = len(value) 37 var jEnd int 38 39 for i := 0; i < maxLen; i++ { 40 key := "" 41 jEnd = i + is.maxLen 42 if jEnd > maxLen { 43 jEnd = maxLen 44 } 45 for j := i; j < jEnd; j++ { 46 key += string(value[j]) 47 if is.contains.Contains(key) { 48 return true 49 } 50 } 51 } 52 53 return false 54 }