Details
-
Spec Change
-
Resolution: Unresolved
-
Unknown
-
None
-
None
-
None
-
None
Description
There are multiple references to type asserting data in the bsoncodec package. For example:
m, ok := val.Interface().(ValueUnmarshaler)
|
if !ok { |
// NB: this error should be unreachable due to the above checks |
return ValueDecoderError{Name: "ValueUnmarshalerDecodeValue", Types: []reflect.Type{tValueUnmarshaler}, Received: val} |
}
|
and
m, ok := val.Interface().(Unmarshaler)
|
if !ok { |
// NB: this error should be unreachable due to the above checks |
return ValueDecoderError{Name: "UnmarshalerDecodeValue", Types: []reflect.Type{tUnmarshaler}, Received: val} |
}
|
It would be helpful for readability and reuse to create a single function that handles all of this logic, something like the following:
switch v := val.Interface().(type) { |
case ValueUnmarshaler: |
// Handle ValueUnmarshaler case |
return ValueDecoderError{Name: "ValueUnmarshalerDecodeValue", Types: []reflect.Type{tValueUnmarshaler}, Received: val} |
case Unmarshaler: |
// Handle Unmarshaler case |
return ValueDecoderError{Name: "UnmarshalerDecodeValue", Types: []reflect.Type{tUnmarshaler}, Received: val} |
default: |
// Handle the case when neither interface is implemented |
return vw.WriteNull() |
}
|
Attachments
Issue Links
- related to
-
GODRIVER-2887 bson: remove use of reflect.Value.MethodByName
-
- Closed
-