1package beanstalk 2 3import "errors" 4 5// ConnError records an error message from the server and the operation 6// and connection that caused it. 7type ConnError struct { 8 Conn *Conn 9 Op string 10 Err error 11} 12 13func (e ConnError) Error() string { 14 return e.Op + ": " + e.Err.Error() 15} 16 17func (e ConnError) Unwrap() error { 18 return e.Err 19} 20 21// Error messages returned by the server. 22var ( 23 ErrBadFormat = errors.New("bad command format") 24 ErrBuried = errors.New("buried") 25 ErrDeadline = errors.New("deadline soon") 26 ErrDraining = errors.New("draining") 27 ErrInternal = errors.New("internal error") 28 ErrJobTooBig = errors.New("job too big") 29 ErrNoCRLF = errors.New("expected CR LF") 30 ErrNotFound = errors.New("not found") 31 ErrNotIgnored = errors.New("not ignored") 32 ErrOOM = errors.New("server is out of memory") 33 ErrTimeout = errors.New("timeout") 34 ErrUnknown = errors.New("unknown command") 35) 36 37var respError = map[string]error{ 38 "BAD_FORMAT": ErrBadFormat, 39 "BURIED": ErrBuried, 40 "DEADLINE_SOON": ErrDeadline, 41 "DRAINING": ErrDraining, 42 "EXPECTED_CRLF": ErrNoCRLF, 43 "INTERNAL_ERROR": ErrInternal, 44 "JOB_TOO_BIG": ErrJobTooBig, 45 "NOT_FOUND": ErrNotFound, 46 "NOT_IGNORED": ErrNotIgnored, 47 "OUT_OF_MEMORY": ErrOOM, 48 "TIMED_OUT": ErrTimeout, 49 "UNKNOWN_COMMAND": ErrUnknown, 50} 51 52type unknownRespError string 53 54func (e unknownRespError) Error() string { 55 return "unknown response: " + string(e) 56} 57 58func findRespError(s string) error { 59 if err := respError[s]; err != nil { 60 return err 61 } 62 return unknownRespError(s) 63} 64