Skip to content

Commit

Permalink
fix: Handle maps correctly (#4)
Browse files Browse the repository at this point in the history
  • Loading branch information
srebhan authored Aug 3, 2023
1 parent fb4e5e0 commit ae4c0d8
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions node.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,9 @@ func visit(parent *Node, msg protoreflect.Message, level int) {
func traverse(parent *Node, field protoreflect.FieldDescriptor, value protoreflect.Value, level int) {
node := &Node{Type: ElementNode, Name: string(field.Name()), level: level}
nodeChildren := 0
if field.IsList() {
switch {
case field.IsList():
l := value.List()

for i := 0; i < l.Len(); i++ {
subNode := handleValue(field.Kind(), l.Get(i), level+1)
if subNode.Type == ElementNode {
Expand All @@ -156,7 +156,25 @@ func traverse(parent *Node, field protoreflect.FieldDescriptor, value protorefle
nodeChildren++
}
}
} else {
case field.IsMap():
key := field.MapKey()
value.Map().Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {
subNode := handleValue(key.Kind(), v, level+1)
if subNode.Type == ElementNode {
// Add element nodes directly to the parent
subNode.Name = k.String()
addNode(parent, subNode)
} else {
// Add basic nodes to the local collection node
elementNode := &Node{Type: ElementNode, Name: k.String(), level: level + 1}
subNode.level += 2
addNode(elementNode, subNode)
addNode(node, elementNode)
nodeChildren++
}
return true
})
default:
subNode := handleValue(field.Kind(), value, level+1)
if subNode.Type == ElementNode {
// Add element nodes directly to the parent
Expand Down

0 comments on commit ae4c0d8

Please sign in to comment.