github.com/zerosnake0/jzon@v0.0.8/val_encoder_native_map_above_go118.go (about)

     1  //+build go1.18
     2  
     3  package jzon
     4  
     5  import (
     6  	"unsafe"
     7  )
     8  
     9  func (enc *directMapEncoder) Encode(ptr unsafe.Pointer, s *Streamer, _ *EncOpts) {
    10  	if s.Error != nil {
    11  		return
    12  	}
    13  	if ptr == nil {
    14  		s.Null()
    15  		return
    16  	}
    17  	ptr = *(*unsafe.Pointer)(ptr)
    18  	if ptr == nil {
    19  		s.Null()
    20  		return
    21  	}
    22  	s.ObjectStart()
    23  	var iter hiter
    24  	mapiterinit(enc.mapRType, ptr, &iter)
    25  	for i := 0; iter.key != nil; i++ {
    26  		enc.keyEncoder.Encode(iter.key, s)
    27  		if s.Error != nil {
    28  			return
    29  		}
    30  		enc.elemEncoder.Encode(iter.elem, s, nil)
    31  		if s.Error != nil {
    32  			return
    33  		}
    34  		mapiternext(&iter)
    35  	}
    36  	s.ObjectEnd()
    37  }