error.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. Cmd string
  12. }
  13. func NewUnknownErrReply(cmd string) *UnknownErrReply {
  14. return &UnknownErrReply{Cmd: cmd}
  15. }
  16. func (u *UnknownErrReply) String() string {
  17. return u.Error()
  18. }
  19. func (u *UnknownErrReply) Error() string {
  20. return "Err unknown command '" + u.Cmd + "'"
  21. }
  22. func (u *UnknownErrReply) ToBytes() []byte {
  23. return []byte("-Err unknown command '" + u.Cmd + "'\r\n")
  24. }
  25. // ArgNumErrReply 表示命令参数数量错误的响应
  26. // 当命令的参数数量不符合预期时使用
  27. type ArgNumErrReply struct {
  28. Cmd string
  29. }
  30. func (a *ArgNumErrReply) Error() string {
  31. return "ERR wrong number of arguments for '" + a.Cmd + "' command"
  32. }
  33. func (a *ArgNumErrReply) ToBytes() []byte {
  34. return []byte("-ERR wrong number of arguments for '" + a.Cmd + "' command\r\n")
  35. }
  36. func (a *ArgNumErrReply) String() string {
  37. return a.Error()
  38. }
  39. // NewArgNumErrReply 创建指定命令的参数数量错误响应
  40. func NewArgNumErrReply(cmd string) *ArgNumErrReply {
  41. return &ArgNumErrReply{
  42. Cmd: cmd,
  43. }
  44. }
  45. // SyntaxErrReply 表示命令语法错误的通用响应
  46. // 对应Redis的"syntax error"响应
  47. type SyntaxErrReply struct{}
  48. func (s *SyntaxErrReply) String() string {
  49. return s.Error()
  50. }
  51. func (s *SyntaxErrReply) Error() string {
  52. return "Err syntax error"
  53. }
  54. func (s *SyntaxErrReply) ToBytes() []byte {
  55. return []byte("-Err syntax error\r\n")
  56. }
  57. func NewSyntaxErrReply() *SyntaxErrReply {
  58. return &SyntaxErrReply{}
  59. }
  60. // WrongTypeErrReply 表示对键值进行类型不匹配操作的错误
  61. // 对应Redis的 "WRONGTYPE" 错误响应
  62. type WrongTypeErrReply struct{}
  63. func (w *WrongTypeErrReply) Error() string {
  64. return "WRONG TYPE Operation against a key holding the wrong kind of value"
  65. }
  66. func (w *WrongTypeErrReply) String() string {
  67. return w.Error()
  68. }
  69. func (w *WrongTypeErrReply) ToBytes() []byte {
  70. return []byte("-WRONG TYPE Operation against a key holding the wrong kind of value\r\n")
  71. }
  72. func NewWrongTypeErrReply() *WrongTypeErrReply {
  73. return &WrongTypeErrReply{}
  74. }
  75. // ProtocolErrReply 表示违反RESP协议规范的错误
  76. // Msg 包含具体的协议违规详情
  77. type ProtocolErrReply struct {
  78. Msg string
  79. }
  80. func (p *ProtocolErrReply) String() string {
  81. return p.Error()
  82. }
  83. func (p *ProtocolErrReply) Error() string {
  84. return "ERR Protocol error: '" + p.Msg + "'"
  85. }
  86. func (p *ProtocolErrReply) ToBytes() []byte {
  87. return []byte("-ERR Protocol error: '" + p.Msg + "'\r\n")
  88. }
  89. func NewProtocolErrReply(msg string) *ProtocolErrReply {
  90. return &ProtocolErrReply{
  91. Msg: msg,
  92. }
  93. }