|
|
@@ -130,10 +130,28 @@ func (encoder *optionalEncoder) EncodeInterface(val interface{}, stream *Stream)
|
|
|
}
|
|
|
|
|
|
func (encoder *optionalEncoder) IsEmpty(ptr unsafe.Pointer) bool {
|
|
|
+ return *((*unsafe.Pointer)(ptr)) == nil
|
|
|
+}
|
|
|
+
|
|
|
+type optionalMapEncoder struct {
|
|
|
+ valueEncoder ValEncoder
|
|
|
+}
|
|
|
+
|
|
|
+func (encoder *optionalMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
|
|
|
if *((*unsafe.Pointer)(ptr)) == nil {
|
|
|
- return true
|
|
|
+ stream.WriteNil()
|
|
|
+ } else {
|
|
|
+ encoder.valueEncoder.Encode(*((*unsafe.Pointer)(ptr)), stream)
|
|
|
}
|
|
|
- return false
|
|
|
+}
|
|
|
+
|
|
|
+func (encoder *optionalMapEncoder) EncodeInterface(val interface{}, stream *Stream) {
|
|
|
+ WriteToStream(val, stream, encoder)
|
|
|
+}
|
|
|
+
|
|
|
+func (encoder *optionalMapEncoder) IsEmpty(ptr unsafe.Pointer) bool {
|
|
|
+ p := *((*unsafe.Pointer)(ptr))
|
|
|
+ return p == nil || encoder.valueEncoder.IsEmpty(p)
|
|
|
}
|
|
|
|
|
|
type placeholderEncoder struct {
|