retypeMySQLRequest / retypeMySQLResponse mirror decodeMySQLMessage: they select the concrete packet struct based on PacketInfo.Type and re-unmarshal the already-decoded generic map into it.
(header *mysql.PacketInfo, raw interface{})
| 1562 | // select the concrete packet struct based on PacketInfo.Type and re-unmarshal |
| 1563 | // the already-decoded generic map into it. |
| 1564 | func retypeMySQLRequest(header *mysql.PacketInfo, raw interface{}) (interface{}, error) { |
| 1565 | if raw == nil || header == nil { |
| 1566 | return raw, nil |
| 1567 | } |
| 1568 | buf, err := json.Marshal(raw) |
| 1569 | if err != nil { |
| 1570 | return nil, err |
| 1571 | } |
| 1572 | var target interface{} |
| 1573 | switch header.Type { |
| 1574 | case mysql.SSLRequest: |
| 1575 | target = &mysql.SSLRequestPacket{} |
| 1576 | case mysql.HandshakeResponse41: |
| 1577 | target = &mysql.HandshakeResponse41Packet{} |
| 1578 | case mysql.CachingSha2PasswordToString(mysql.RequestPublicKey), |
| 1579 | mysql.EncryptedPassword, |
| 1580 | mysql.PlainPassword: |
| 1581 | var s string |
| 1582 | if err := json.Unmarshal(buf, &s); err != nil { |
| 1583 | return nil, err |
| 1584 | } |
| 1585 | return s, nil |
| 1586 | case mysql.CommandStatusToString(mysql.COM_QUIT): |
| 1587 | target = &mysql.QuitPacket{} |
| 1588 | case mysql.CommandStatusToString(mysql.COM_INIT_DB): |
| 1589 | target = &mysql.InitDBPacket{} |
| 1590 | case mysql.CommandStatusToString(mysql.COM_STATISTICS): |
| 1591 | target = &mysql.StatisticsPacket{} |
| 1592 | case mysql.CommandStatusToString(mysql.COM_DEBUG): |
| 1593 | target = &mysql.DebugPacket{} |
| 1594 | case mysql.CommandStatusToString(mysql.COM_PING): |
| 1595 | target = &mysql.PingPacket{} |
| 1596 | case mysql.CommandStatusToString(mysql.COM_CHANGE_USER): |
| 1597 | target = &mysql.ChangeUserPacket{} |
| 1598 | case mysql.CommandStatusToString(mysql.COM_RESET_CONNECTION): |
| 1599 | target = &mysql.ResetConnectionPacket{} |
| 1600 | case mysql.CommandStatusToString(mysql.COM_QUERY): |
| 1601 | target = &mysql.QueryPacket{} |
| 1602 | case mysql.CommandStatusToString(mysql.COM_STMT_PREPARE): |
| 1603 | target = &mysql.StmtPreparePacket{} |
| 1604 | case mysql.CommandStatusToString(mysql.COM_STMT_EXECUTE): |
| 1605 | target = &mysql.StmtExecutePacket{} |
| 1606 | case mysql.CommandStatusToString(mysql.COM_STMT_CLOSE): |
| 1607 | target = &mysql.StmtClosePacket{} |
| 1608 | case mysql.CommandStatusToString(mysql.COM_STMT_RESET): |
| 1609 | target = &mysql.StmtResetPacket{} |
| 1610 | case mysql.CommandStatusToString(mysql.COM_STMT_SEND_LONG_DATA): |
| 1611 | target = &mysql.StmtSendLongDataPacket{} |
| 1612 | default: |
| 1613 | return raw, nil |
| 1614 | } |
| 1615 | if err := json.Unmarshal(buf, target); err != nil { |
| 1616 | return nil, err |
| 1617 | } |
| 1618 | return target, nil |
| 1619 | } |
| 1620 | |
| 1621 | func retypeMySQLResponse(header *mysql.PacketInfo, raw interface{}) (interface{}, error) { |
no test coverage detected