mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2024-11-14 05:11:17 +08:00
7f588935ea
* feat: host support domain and multiple ips * chore: append local address via `clash` * chore: update hosts demo * chore: unified parse mixed string and array * fix: flatten cname * chore: adjust logic * chore: reuse code * chore: use cname in tunnel * chore: try use domain mapping when normal dns * chore: format code
35 lines
737 B
Go
35 lines
737 B
Go
package utils
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"reflect"
|
|
)
|
|
|
|
func Filter[T comparable](tSlice []T, filter func(t T) bool) []T {
|
|
result := make([]T, 0)
|
|
for _, t := range tSlice {
|
|
if filter(t) {
|
|
result = append(result, t)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func ToStringSlice(value any) ([]string, error) {
|
|
strArr := make([]string, 0)
|
|
switch reflect.TypeOf(value).Kind() {
|
|
case reflect.Slice, reflect.Array:
|
|
origin := reflect.ValueOf(value)
|
|
for i := 0; i < origin.Len(); i++ {
|
|
item := fmt.Sprintf("%v", origin.Index(i))
|
|
strArr = append(strArr, item)
|
|
}
|
|
case reflect.String:
|
|
strArr = append(strArr, fmt.Sprintf("%v", value))
|
|
default:
|
|
return nil, errors.New("value format error, must be string or array")
|
|
}
|
|
return strArr, nil
|
|
}
|