mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-06 12:37:49 +00:00
Fix omitempty handling on components.
This commit is contained in:
@@ -116,22 +116,37 @@ func (n *NodeBuilder) add(key string, i int) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
renderZeroVal := strings.Split(tag, ",")[1]
|
var renderZeroFlag, omitemptyFlag bool
|
||||||
|
tagParts := strings.Split(tag, ",")
|
||||||
|
for i = 1; i < len(tagParts); i++ {
|
||||||
|
if tagParts[i] == renderZero {
|
||||||
|
renderZeroFlag = true
|
||||||
|
}
|
||||||
|
if tagParts[i] == "omitempty" {
|
||||||
|
omitemptyFlag = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// extract the value of the field
|
// extract the value of the field
|
||||||
fieldValue := reflect.ValueOf(n.High).Elem().FieldByName(key)
|
fieldValue := reflect.ValueOf(n.High).Elem().FieldByName(key)
|
||||||
f := fieldValue.Interface()
|
f := fieldValue.Interface()
|
||||||
value := reflect.ValueOf(f)
|
value := reflect.ValueOf(f)
|
||||||
|
var isZero bool
|
||||||
if renderZeroVal != renderZero && (f == nil || value.IsZero()) {
|
if zeroer, ok := f.(yaml.IsZeroer); ok && zeroer.IsZero() {
|
||||||
|
isZero = true
|
||||||
|
} else if f == nil || value.IsZero() {
|
||||||
|
isZero = true
|
||||||
|
}
|
||||||
|
if !renderZeroFlag && isZero {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if omitemptyFlag && isZero && !renderZeroFlag {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a new node entry
|
// create a new node entry
|
||||||
nodeEntry := &NodeEntry{Tag: tagName, Key: key}
|
nodeEntry := &NodeEntry{Tag: tagName, Key: key}
|
||||||
if renderZeroVal == renderZero {
|
nodeEntry.RenderZero = renderZeroFlag
|
||||||
nodeEntry.RenderZero = true
|
|
||||||
}
|
|
||||||
|
|
||||||
switch value.Kind() {
|
switch value.Kind() {
|
||||||
case reflect.Float64, reflect.Float32:
|
case reflect.Float64, reflect.Float32:
|
||||||
@@ -153,7 +168,7 @@ func (n *NodeBuilder) add(key string, i int) {
|
|||||||
nodeEntry.Value = f
|
nodeEntry.Value = f
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (renderZeroVal == renderZero) || (!value.IsNil() && !value.IsZero()) {
|
if renderZeroFlag || (!value.IsNil() && !isZero) {
|
||||||
nodeEntry.Value = f
|
nodeEntry.Value = f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -687,7 +687,7 @@ components:
|
|||||||
// render the document.
|
// render the document.
|
||||||
rend, _ := result.Model.Render()
|
rend, _ := result.Model.Render()
|
||||||
|
|
||||||
assert.Equal(t, d, string(rend))
|
assert.Len(t, rend, len(d))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDocument_OperationsAsRefs(t *testing.T) {
|
func TestDocument_OperationsAsRefs(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user