-
Notifications
You must be signed in to change notification settings - Fork 1
/
contains.go
35 lines (28 loc) · 750 Bytes
/
contains.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package goulash
import (
"fmt"
"reflect"
"strings"
"github.com/farbodsalimi/goulash/utils"
)
func Contains[T, M any](object T, element M) bool {
parsedObject := utils.ParseGeneric(object)
parsedElement := utils.ParseGeneric(element)
switch parsedObject.Kind {
case reflect.Slice, reflect.Array:
for i := 0; i < parsedObject.Value.Len(); i++ {
if fmt.Sprint(parsedObject.Value.Index(i)) == fmt.Sprint(parsedElement.Value) {
return true
}
}
case reflect.Map:
for _, key := range parsedObject.Value.MapKeys() {
if fmt.Sprint(key) == fmt.Sprint(parsedElement.Value) {
return true
}
}
case reflect.String:
return strings.Contains(parsedObject.Value.String(), parsedElement.Value.String())
}
return false
}