MCPcopy Create free account
hub / github.com/apache/fory / generateStructSerializer

Function generateStructSerializer

go/fory/codegen/generator.go:401–454  ·  view source on GitHub ↗

generateStructSerializer generates a complete serializer for a struct

(buf *bytes.Buffer, s *StructInfo)

Source from the content-addressed store, hash-verified

399
400// generateStructSerializer generates a complete serializer for a struct
401func generateStructSerializer(buf *bytes.Buffer, s *StructInfo) error {
402 // Generate struct serializer type with lazy hash computation
403 fmt.Fprintf(buf, "type %s_ForyGenSerializer struct {\n", s.Name)
404 fmt.Fprintf(buf, "\tstructHash int32\n")
405 fmt.Fprintf(buf, "}\n\n")
406
407 // Generate factory function
408 fmt.Fprintf(buf, "func NewSerializerFor_%s() fory.Serializer {\n", s.Name)
409 fmt.Fprintf(buf, "\treturn &%s_ForyGenSerializer{}\n", s.Name)
410 fmt.Fprintf(buf, "}\n\n")
411
412 // Generate hash initialization method
413 fmt.Fprintf(buf, "func (g *%s_ForyGenSerializer) initHash(resolver *fory.TypeResolver) {\n", s.Name)
414 fmt.Fprintf(buf, "\tif g.structHash == 0 {\n")
415 fmt.Fprintf(buf, "\t\tg.structHash = fory.GetStructHash(reflect.TypeOf(%s{}), resolver)\n", s.Name)
416 fmt.Fprintf(buf, "\t}\n")
417 fmt.Fprintf(buf, "}\n\n")
418
419 // Generate Write method (entry point with ref/type handling)
420 if err := generateWriteMethod(buf, s); err != nil {
421 return err
422 }
423
424 // Generate strongly-typed WriteData method (delegate to encoder)
425 if err := generateWriteTyped(buf, s); err != nil {
426 return err
427 }
428
429 // Generate interface compatibility methods (delegate to encoder/decoder)
430 if err := generateWriteInterface(buf, s); err != nil {
431 return err
432 }
433
434 // Generate Read method (entry point with ref/type handling)
435 if err := generateReadMethod(buf, s); err != nil {
436 return err
437 }
438
439 // Generate strongly-typed ReadData method (delegate to decoder)
440 if err := generateReadTyped(buf, s); err != nil {
441 return err
442 }
443
444 if err := generateReadInterface(buf, s); err != nil {
445 return err
446 }
447
448 // Generate ReadWithTypeInfo method
449 if err := generateReadWithTypeInfoMethod(buf, s); err != nil {
450 return err
451 }
452
453 return nil
454}
455
456// generateWriteMethod generates the Write method that handles ref/type flags
457func generateWriteMethod(buf *bytes.Buffer, s *StructInfo) error {

Callers 2

generateCodeForFileFunction · 0.85
generateCodeFunction · 0.85

Calls 7

generateWriteMethodFunction · 0.85
generateWriteTypedFunction · 0.85
generateWriteInterfaceFunction · 0.85
generateReadMethodFunction · 0.85
generateReadTypedFunction · 0.85
generateReadInterfaceFunction · 0.85

Tested by

no test coverage detected