error.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Author: simon (ynwdlxm@163.com)
  2. // Date: 2025/7/11 13:51
  3. // Desc: 常见错误回复类型
  4. // Package reply 实现了Redis序列化协议(RESP)的错误响应
  5. // 提供标准化的错误类型用于常见Redis错误场景
  6. // 这些错误类型实现了Reply接口,允许在Redis服务器中返回错误信息
  7. package reply
  8. // UnknownErrReply 表示Redis协议中的未知错误回复
  9. // 当没有更具体的错误类型可用时使用
  10. type UnknownErrReply struct{}
  11. func NewUnknownErrReply() *UnknownErrReply {
  12. return &UnknownErrReply{}
  13. }
  14. func (u *UnknownErrReply) String() string {
  15. return u.Error()
  16. }
  17. func (u *UnknownErrReply) Error() string {
  18. return "Err unknown"
  19. }
  20. func (u *UnknownErrReply) ToBytes() []byte {
  21. return []byte("-Err unknown\r\n")
  22. }
  23. // ArgNumErrReply 表示命令参数数量错误的响应
  24. // 当命令的参数数量不符合预期时使用
  25. type ArgNumErrReply struct {
  26. Cmd string
  27. }
  28. func (a *ArgNumErrReply) Error() string {
  29. return "ERR wrong number of arguments for '" + a.Cmd + "' command"
  30. }
  31. func (a *ArgNumErrReply) ToBytes() []byte {
  32. return []byte("-ERR wrong number of arguments for '" + a.Cmd + "' command\r\n")
  33. }
  34. // NewArgNumErrReply 创建指定命令的参数数量错误响应
  35. func NewArgNumErrReply(cmd string) *ArgNumErrReply {
  36. return &ArgNumErrReply{
  37. Cmd: cmd,
  38. }
  39. }
  40. // SyntaxErrReply 表示命令语法错误的通用响应
  41. // 对应Redis的"syntax error"响应
  42. type SyntaxErrReply struct{}
  43. func (s *SyntaxErrReply) Error() string {
  44. return "Err syntax error"
  45. }
  46. func (s *SyntaxErrReply) ToBytes() []byte {
  47. return []byte("-Err syntax error\r\n")
  48. }
  49. func NewSyntaxErrReply() *SyntaxErrReply {
  50. return &SyntaxErrReply{}
  51. }
  52. // WrongTypeErrReply 表示对键值进行类型不匹配操作的错误
  53. // 对应Redis的 "WRONGTYPE" 错误响应
  54. type WrongTypeErrReply struct{}
  55. func (w *WrongTypeErrReply) Error() string {
  56. return "WRONG TYPE Operation against a key holding the wrong kind of value"
  57. }
  58. func (w *WrongTypeErrReply) ToBytes() []byte {
  59. return []byte("-WRONG TYPE Operation against a key holding the wrong kind of value\r\n")
  60. }
  61. func NewWrongTypeErrReply() *WrongTypeErrReply {
  62. return &WrongTypeErrReply{}
  63. }
  64. // ProtocolErrReply 表示违反RESP协议规范的错误
  65. // Msg 包含具体的协议违规详情
  66. type ProtocolErrReply struct {
  67. Msg string
  68. }
  69. func (p *ProtocolErrReply) Error() string {
  70. return "ERR Protocol error: '" + p.Msg + "'"
  71. }
  72. func (p *ProtocolErrReply) ToBytes() []byte {
  73. return []byte("-ERR Protocol error: '" + p.Msg + "'\r\n")
  74. }
  75. func NewProtocolErrReply(msg string) *ProtocolErrReply {
  76. return &ProtocolErrReply{
  77. Msg: msg,
  78. }
  79. }