MCPcopy
hub / github.com/wavetermdev/waveterm / setValue

Function setValue

pkg/util/utilfn/marshal.go:135–166  ·  view source on GitHub ↗

setValue attempts to set a reflect.Value with a given interface{} value

(field reflect.Value, value any)

Source from the content-addressed store, hash-verified

133
134// setValue attempts to set a reflect.Value with a given interface{} value
135func setValue(field reflect.Value, value any) error {
136 if value == nil {
137 return nil
138 }
139
140 valueRef := reflect.ValueOf(value)
141
142 // Direct assignment if types are exactly equal
143 if valueRef.Type() == field.Type() {
144 field.Set(valueRef)
145 return nil
146 }
147
148 // Check if types are assignable
149 if valueRef.Type().AssignableTo(field.Type()) {
150 field.Set(valueRef)
151 return nil
152 }
153
154 // If field is pointer and value isn't already a pointer, try address
155 if field.Kind() == reflect.Ptr && valueRef.Kind() != reflect.Ptr {
156 return setValue(field, valueRef.Addr().Interface())
157 }
158
159 // Try conversion if types are convertible
160 if valueRef.Type().ConvertibleTo(field.Type()) {
161 field.Set(valueRef.Convert(field.Type()))
162 return nil
163 }
164
165 return fmt.Errorf("cannot set value of type %v to field of type %v", valueRef.Type(), field.Type())
166}
167
168// DecodeDataURL decodes a data URL and returns the mimetype and raw data bytes
169func DecodeDataURL(dataURL string) (mimeType string, data []byte, err error) {

Callers 1

MapToStructFunction · 0.70

Calls 2

TypeMethod · 0.80
SetMethod · 0.45

Tested by

no test coverage detected