generateStructSerializer generates a complete serializer for a struct
(buf *bytes.Buffer, s *StructInfo)
| 399 | |
| 400 | // generateStructSerializer generates a complete serializer for a struct |
| 401 | func 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 |
| 457 | func generateWriteMethod(buf *bytes.Buffer, s *StructInfo) error { |
no test coverage detected