github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/binding/codegen/encode.go (about)

     1  package codegen
     2  
     3  import "github.com/v2pro/wombat/generic"
     4  
     5  var Encode = generic.DefineFunc("Encode(dst interface{}, src interface{})").
     6  	Param("EXT", "user provided extension").
     7  	Param("DT", "the dst type to copy into").
     8  	Param("ST", "the src type to copy from").
     9  	ImportFunc(encodeAnything).
    10  	ImportPackage("reflect").
    11  	Declare("var typeOf = reflect.TypeOf").
    12  	Source(`
    13  {{ $decode := expand "EncodeAnything" "EXT" .EXT "DT" .DT "ST" .ST }}
    14  stream := dst.({{.DT|name}})
    15  {{ range $extType := .EXT.ExtTypes }} 
    16  	if stream.GetEncoder("{{$extType|name}}") == nil {
    17  		stream.PrepareEncoder(reflect.TypeOf((*{{$extType|name}})(nil)).Elem())
    18  	}
    19  {{ end }}
    20  {{$decode}}(stream, src.({{.ST|name}}))
    21  `)