feat: safe websocket server implementation

This commit is contained in:
2025-09-24 23:06:40 +07:00
parent 8dd4050cad
commit 34811d4132
7 changed files with 407 additions and 0 deletions

40
internal/nil_checker.go Normal file
View File

@@ -0,0 +1,40 @@
package internal
import (
"fmt"
"reflect"
"strings"
)
func NilChecker(data any) error {
val := reflect.ValueOf(data)
if val.Kind() == reflect.Ptr {
val = val.Elem()
}
valType := val.Type()
if val.Kind() != reflect.Struct {
return fmt.Errorf("data is not a struct")
}
nilFields := []string{}
for i := range val.NumField() {
field := val.Field(i)
fieldType := valType.Field(i)
tagValue := fieldType.Tag.Get("nil_checker")
if tagValue == "required" {
if field.Kind() == reflect.Ptr {
if field.IsNil() {
nilFields = append(nilFields, fieldType.Name)
}
}
}
}
if len(nilFields) > 0 {
return fmt.Errorf("%s is empty", strings.Join(nilFields, ","))
}
return nil
}