// Author: simon (ynwdlxm@163.com) // Date: 2025/7/11 13:51 // Desc: 常见错误回复类型 // Package reply 实现了Redis序列化协议(RESP)的错误响应 // 提供标准化的错误类型用于常见Redis错误场景 // 这些错误类型实现了Reply接口,允许在Redis服务器中返回错误信息 package reply // UnknownErrReply 表示Redis协议中的未知错误回复 // 当没有更具体的错误类型可用时使用 type UnknownErrReply struct { Cmd string } func NewUnknownErrReply(cmd string) *UnknownErrReply { return &UnknownErrReply{Cmd: cmd} } func (u *UnknownErrReply) String() string { return u.Error() } func (u *UnknownErrReply) Error() string { return "Err unknown command '" + u.Cmd + "'" } func (u *UnknownErrReply) ToBytes() []byte { return []byte("-Err unknown command '" + u.Cmd + "'\r\n") } // ArgNumErrReply 表示命令参数数量错误的响应 // 当命令的参数数量不符合预期时使用 type ArgNumErrReply struct { Cmd string } func (a *ArgNumErrReply) Error() string { return "ERR wrong number of arguments for '" + a.Cmd + "' command" } func (a *ArgNumErrReply) ToBytes() []byte { return []byte("-ERR wrong number of arguments for '" + a.Cmd + "' command\r\n") } func (a *ArgNumErrReply) String() string { return a.Error() } // NewArgNumErrReply 创建指定命令的参数数量错误响应 func NewArgNumErrReply(cmd string) *ArgNumErrReply { return &ArgNumErrReply{ Cmd: cmd, } } // SyntaxErrReply 表示命令语法错误的通用响应 // 对应Redis的"syntax error"响应 type SyntaxErrReply struct{} func (s *SyntaxErrReply) Error() string { return "Err syntax error" } func (s *SyntaxErrReply) ToBytes() []byte { return []byte("-Err syntax error\r\n") } func NewSyntaxErrReply() *SyntaxErrReply { return &SyntaxErrReply{} } // WrongTypeErrReply 表示对键值进行类型不匹配操作的错误 // 对应Redis的 "WRONGTYPE" 错误响应 type WrongTypeErrReply struct{} func (w *WrongTypeErrReply) Error() string { return "WRONG TYPE Operation against a key holding the wrong kind of value" } func (w *WrongTypeErrReply) String() string { return w.Error() } func (w *WrongTypeErrReply) ToBytes() []byte { return []byte("-WRONG TYPE Operation against a key holding the wrong kind of value\r\n") } func NewWrongTypeErrReply() *WrongTypeErrReply { return &WrongTypeErrReply{} } // ProtocolErrReply 表示违反RESP协议规范的错误 // Msg 包含具体的协议违规详情 type ProtocolErrReply struct { Msg string } func (p *ProtocolErrReply) Error() string { return "ERR Protocol error: '" + p.Msg + "'" } func (p *ProtocolErrReply) ToBytes() []byte { return []byte("-ERR Protocol error: '" + p.Msg + "'\r\n") } func NewProtocolErrReply(msg string) *ProtocolErrReply { return &ProtocolErrReply{ Msg: msg, } }