mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-10-01 15:46:38 +08:00
45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package common
|
|
|
|
import (
|
|
"github.com/go-playground/validator/v10"
|
|
"reflect"
|
|
)
|
|
|
|
var Validate *validator.Validate
|
|
|
|
func init() {
|
|
Validate = validator.New()
|
|
_ = Validate.RegisterValidation("ValidateEmbeddingInput", validateEmbeddingInput)
|
|
}
|
|
|
|
func validateEmbeddingInput(fl validator.FieldLevel) bool {
|
|
v := fl.Field()
|
|
var check func(v reflect.Value, mustBe reflect.Kind) bool
|
|
check = func(v reflect.Value, mustBe reflect.Kind) bool {
|
|
if mustBe != reflect.Invalid && v.Kind() != mustBe {
|
|
return false
|
|
}
|
|
switch v.Kind() {
|
|
case reflect.String:
|
|
return true
|
|
case reflect.Array, reflect.Slice:
|
|
if v.Len() == 0 {
|
|
return false
|
|
}
|
|
for i := 0; i < v.Len(); i++ {
|
|
checkResult := check(v.Index(i), reflect.String)
|
|
if v.Index(i).Kind() == reflect.Interface || v.Index(i).Kind() == reflect.Ptr {
|
|
checkResult = checkResult || check(v.Index(i).Elem(), reflect.String)
|
|
}
|
|
if !checkResult {
|
|
return false
|
|
}
|
|
}
|
|
default:
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
return check(v, reflect.Invalid)
|
|
}
|