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