Files
kubevpn/vendor/github.com/expr-lang/expr/builtin/validation.go
2025-04-19 10:06:56 +08:00

39 lines
1.3 KiB
Go

package builtin
import (
"fmt"
"reflect"
"github.com/expr-lang/expr/internal/deref"
)
func validateAggregateFunc(name string, args []reflect.Type) (reflect.Type, error) {
switch len(args) {
case 0:
return anyType, fmt.Errorf("not enough arguments to call %s", name)
default:
for _, arg := range args {
switch kind(deref.Type(arg)) {
case reflect.Interface, reflect.Array, reflect.Slice:
return anyType, nil
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64:
default:
return anyType, fmt.Errorf("invalid argument for %s (type %s)", name, arg)
}
}
return args[0], nil
}
}
func validateRoundFunc(name string, args []reflect.Type) (reflect.Type, error) {
if len(args) != 1 {
return anyType, fmt.Errorf("invalid number of arguments (expected 1, got %d)", len(args))
}
switch kind(args[0]) {
case reflect.Float32, reflect.Float64, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Interface:
return floatType, nil
default:
return anyType, fmt.Errorf("invalid argument for %s (type %s)", name, args[0])
}
}