Files
access-manager-api/app/common/utils.go
T
alu 4783d79523
tronnet/workflows: Static Analysis -- Golang / static-go (push) Successful in 30s
refactor routes,
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
2026-08-21 20:49:15 +00:00

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
}