MCPcopy
hub / github.com/go-yaml/yaml / merge

Method merge

decode.go:959–996  ·  view source on GitHub ↗
(parent *Node, merge *Node, out reflect.Value)

Source from the content-addressed store, hash-verified

957}
958
959func (d *decoder) merge(parent *Node, merge *Node, out reflect.Value) {
960 mergedFields := d.mergedFields
961 if mergedFields == nil {
962 d.mergedFields = make(map[interface{}]bool)
963 for i := 0; i < len(parent.Content); i += 2 {
964 k := reflect.New(ifaceType).Elem()
965 if d.unmarshal(parent.Content[i], k) {
966 d.mergedFields[k.Interface()] = true
967 }
968 }
969 }
970
971 switch merge.Kind {
972 case MappingNode:
973 d.unmarshal(merge, out)
974 case AliasNode:
975 if merge.Alias != nil && merge.Alias.Kind != MappingNode {
976 failWantMap()
977 }
978 d.unmarshal(merge, out)
979 case SequenceNode:
980 for i := 0; i < len(merge.Content); i++ {
981 ni := merge.Content[i]
982 if ni.Kind == AliasNode {
983 if ni.Alias != nil && ni.Alias.Kind != MappingNode {
984 failWantMap()
985 }
986 } else if ni.Kind != MappingNode {
987 failWantMap()
988 }
989 d.unmarshal(ni, out)
990 }
991 default:
992 failWantMap()
993 }
994
995 d.mergedFields = mergedFields
996}
997
998func isMerge(n *Node) bool {
999 return n.Kind == ScalarNode && n.Value == "<<" && (n.Tag == "" || n.Tag == "!" || shortTag(n.Tag) == mergeTag)

Callers 2

mappingMethod · 0.95
mappingStructMethod · 0.95

Calls 2

unmarshalMethod · 0.95
failWantMapFunction · 0.85

Tested by

no test coverage detected