tronnet/workflows: Static Analysis -- Golang / static-go (push) Successful in 30s
use json encoding for route body parameters, implement modify user/group/pool operations, simplify schema by using comon lib struct tags and RequireAll and AtLeastOne helper functions, properly implement locadb as Backend interface
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package app
|
|
|
|
import (
|
|
"reflect"
|
|
)
|
|
|
|
// RequireAll ensures that EVERY non-excluded exported field in the struct is non-zero.
|
|
func RequireAll(v any, excludes ...string) bool {
|
|
val := reflect.ValueOf(v)
|
|
if val.Kind() == reflect.Pointer {
|
|
val = val.Elem()
|
|
}
|
|
typ := val.Type()
|
|
|
|
excludeMap := make(map[string]bool)
|
|
for _, ex := range excludes {
|
|
excludeMap[ex] = true
|
|
}
|
|
|
|
for i := 0; i < val.NumField(); i++ {
|
|
fieldName := typ.Field(i).Name
|
|
if excludeMap[fieldName] {
|
|
continue
|
|
}
|
|
if val.Field(i).IsZero() {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// AtLeastOne ensures that AT LEAST ONE non-excluded exported field is non-zero.
|
|
func AtLeastOne(v any, excludes ...string) bool {
|
|
val := reflect.ValueOf(v)
|
|
if val.Kind() == reflect.Pointer {
|
|
val = val.Elem()
|
|
}
|
|
typ := val.Type()
|
|
|
|
excludeMap := make(map[string]bool)
|
|
for _, ex := range excludes {
|
|
excludeMap[ex] = true
|
|
}
|
|
|
|
for i := 0; i < val.NumField(); i++ {
|
|
fieldName := typ.Field(i).Name
|
|
if excludeMap[fieldName] {
|
|
continue
|
|
}
|
|
if !val.Field(i).IsZero() {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|