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 `)