package utils func TypedSliceToInterfaceSlice[T any](s []T) []any { is := make([]any, 0, len(s)) for _, t := range s { is = append(is, t) } return is } func InterfaceSliceToTypedSlice[T any](s []any) []T { ts := make([]T, 0, len(s)) for _, t := range s { ts = append(ts, t.(T)) } return ts } func InterfaceSliceContains[T comparable](s []any, o T) bool { for _, _t := range s { switch t := _t.(type) { case T: if t == o { return true } } } return false } func RemoveFromUnorderedSlice[T comparable](s []T, o T) []T { for i, t := range s { if t != o { continue } s[i] = s[len(s) - 1] return s[:len(s) - 1] } return s }