(c *gin.Context)
| 598 | } |
| 599 | |
| 600 | func decodeAgentChannelReplyRequest(c *gin.Context) (decodedAgentChannelReplyRequest, error) { |
| 601 | if c == nil || c.Request == nil || c.Request.Body == nil { |
| 602 | return decodedAgentChannelReplyRequest{}, NewNetworkValidationError( |
| 603 | errors.New("reply request body is required"), |
| 604 | ) |
| 605 | } |
| 606 | var raw map[string]json.RawMessage |
| 607 | if err := json.NewDecoder(c.Request.Body).Decode(&raw); err != nil { |
| 608 | return decodedAgentChannelReplyRequest{}, fmt.Errorf("decode agent channel reply request: %w", err) |
| 609 | } |
| 610 | if err := contract.ValidateNoRawClaimTokenField(raw); err != nil { |
| 611 | return decodedAgentChannelReplyRequest{}, NewNetworkValidationError(err) |
| 612 | } |
| 613 | |
| 614 | var req decodedAgentChannelReplyRequest |
| 615 | if err := decodeRawString(raw["reply_to_message_id"], &req.ReplyToMessageID); err != nil { |
| 616 | return decodedAgentChannelReplyRequest{}, NewNetworkValidationError(fmt.Errorf("reply_to_message_id: %w", err)) |
| 617 | } |
| 618 | if err := decodeRawString(raw["idempotency_key"], &req.IdempotencyKey); err != nil { |
| 619 | return decodedAgentChannelReplyRequest{}, NewNetworkValidationError(fmt.Errorf("idempotency_key: %w", err)) |
| 620 | } |
| 621 | req.Body = cloneRawMessage(raw["body"]) |
| 622 | if len(bytes.TrimSpace(req.Body)) == 0 { |
| 623 | return decodedAgentChannelReplyRequest{}, NewNetworkValidationError(errors.New("body is required")) |
| 624 | } |
| 625 | |
| 626 | if metadataRaw := bytes.TrimSpace(raw["metadata"]); len(metadataRaw) > 0 && |
| 627 | !bytes.Equal(metadataRaw, []byte("null")) && |
| 628 | !bytes.Equal(metadataRaw, []byte("{}")) { |
| 629 | metadata, ok, err := decodeOptionalCoordinationMetadata(metadataRaw) |
| 630 | if err != nil { |
| 631 | return decodedAgentChannelReplyRequest{}, NewNetworkValidationError(fmt.Errorf("metadata: %w", err)) |
| 632 | } |
| 633 | if ok { |
| 634 | req.Metadata = metadata |
| 635 | } |
| 636 | } |
| 637 | return req, nil |
| 638 | } |
| 639 | |
| 640 | func decodeOptionalCoordinationMetadata( |
| 641 | raw json.RawMessage, |
no test coverage detected