package main

import (
	"fmt"

	"gopkg.in/yaml.v3"
)

func printYAML(node *yaml.Node) {
	switch node.Kind {
	case yaml.MappingNode:
		fmt.Print(node.HeadComment)
		fmt.Print("{")
		for i := 0; i < len(node.Content)/2; i++ {
			key := node.Content[i*2]
			value := node.Content[i*2+1]
			printYAML(key)
			fmt.Print(": ")
			printYAML(value)
			if i < len(node.Content)/2-1 {
				fmt.Print(", ")
			}
		}
		fmt.Print("}")
		fmt.Print(node.FootComment)
	case yaml.SequenceNode:
		fmt.Print("[")
		for i, n := range node.Content {
			printYAML(n)
			if i < len(node.Content)-1 {
				fmt.Print(", ")
			}
		}
		fmt.Print("]")
	default:
		fmt.Print(node.Value)
	}
}

func main() {
	data := `
test:
  smfSystem:
    display: "SMF System"
    list:
    - name: "sbiIpAddr"
      type: "string"
      value: "172.16.5.150"
      access: "read-write"
      filter: ''
      display: "SBI IP"
      comment: ""      
amf:
  smfSystem:
    display: "SMF System"
    list:
    - name: "sbiIpAddr"
      type: "string"
      value: "172.16.5.150"
      access: "read-write"
      filter: ''
      display: "SBI IP"
      comment: ""
`
	var node yaml.Node
	if err := yaml.Unmarshal([]byte(data), &node); err != nil {
		panic(err)
	}
	printYAML(&node)
}
