MCPcopy
hub / github.com/duke-git/lancet / cloneMap

Method cloneMap

convertor/convertor_internal.go:117–145  ·  view source on GitHub ↗
(v reflect.Value)

Source from the content-addressed store, hash-verified

115}
116
117func (c *cloner) cloneMap(v reflect.Value) reflect.Value {
118 if v.IsNil() {
119 return reflect.Zero(v.Type())
120 }
121
122 clonedMap := reflect.MakeMap(v.Type())
123
124 for _, key := range v.MapKeys() {
125 value := v.MapIndex(key)
126 clonedKey := c.clone(key)
127 clonedValue := c.clone(value)
128
129 if !isNillable(clonedKey) || !clonedKey.IsNil() {
130 clonedKey = clonedKey.Convert(key.Type())
131 }
132
133 if (!isNillable(clonedValue) || !clonedValue.IsNil()) && clonedValue.IsValid() {
134 clonedValue = clonedValue.Convert(value.Type())
135 }
136
137 if !clonedValue.IsValid() {
138 clonedValue = reflect.Zero(clonedMap.Type().Elem())
139 }
140
141 clonedMap.SetMapIndex(clonedKey, clonedValue)
142 }
143
144 return clonedMap
145}
146
147func isNillable(v reflect.Value) bool {
148 switch v.Kind() {

Callers 1

cloneMethod · 0.95

Calls 3

cloneMethod · 0.95
isNillableFunction · 0.85
IsNilMethod · 0.45

Tested by

no test coverage detected