mirror of
https://github.com/Fishwaldo/huma.git
synced 2025-03-15 11:21:42 +00:00
fix: better handling of zero values; no panic for generic types
This commit is contained in:
parent
78d423d0e4
commit
d0e1f45708
3 changed files with 10 additions and 4 deletions
|
@ -239,13 +239,13 @@ func shallowStructToMap(v reflect.Value, result map[string]interface{}) {
|
|||
if name == "-" {
|
||||
continue
|
||||
}
|
||||
if len(parts) == 2 && parts[1] == "omitempty" && v.Field(i).IsZero() {
|
||||
if len(parts) > 1 && parts[1] == "omitempty" {
|
||||
vf := v.Field(i)
|
||||
zero := vf.IsZero()
|
||||
if vf.Kind() == reflect.Slice || vf.Kind() == reflect.Map {
|
||||
// Special case: omit if they have no items in them to match the
|
||||
// JSON encoder.
|
||||
zero = vf.Len() > 0
|
||||
zero = vf.Len() == 0
|
||||
}
|
||||
if zero {
|
||||
continue
|
||||
|
|
|
@ -32,7 +32,9 @@ func getFields(typ reflect.Type) []reflect.StructField {
|
|||
if newTyp.Kind() == reflect.Ptr {
|
||||
newTyp = newTyp.Elem()
|
||||
}
|
||||
fields = append(fields, getFields(newTyp)...)
|
||||
if newTyp.Kind() == reflect.Struct {
|
||||
fields = append(fields, getFields(newTyp)...)
|
||||
}
|
||||
}
|
||||
|
||||
return fields
|
||||
|
|
|
@ -200,7 +200,9 @@ func getFields(typ reflect.Type) []reflect.StructField {
|
|||
if newTyp.Kind() == reflect.Ptr {
|
||||
newTyp = newTyp.Elem()
|
||||
}
|
||||
fields = append(fields, getFields(newTyp)...)
|
||||
if newTyp.Kind() == reflect.Struct {
|
||||
fields = append(fields, getFields(newTyp)...)
|
||||
}
|
||||
}
|
||||
|
||||
return fields
|
||||
|
@ -542,6 +544,8 @@ func GenerateWithMode(t reflect.Type, mode Mode, schema *Schema) (*Schema, error
|
|||
return GenerateWithMode(t.Elem(), mode, schema)
|
||||
case reflect.Interface:
|
||||
// Interfaces can be any type.
|
||||
case reflect.Uintptr, reflect.UnsafePointer, reflect.Func:
|
||||
// Ignored...
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported type %s from %s", t.Kind(), t)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue