1package errdefs // import "github.com/docker/docker/errdefs"
2
3type causer interface {
4	Cause() error
5}
6
7func getImplementer(err error) error {
8	switch e := err.(type) {
9	case
10		ErrNotFound,
11		ErrInvalidParameter,
12		ErrConflict,
13		ErrUnauthorized,
14		ErrUnavailable,
15		ErrForbidden,
16		ErrSystem,
17		ErrNotModified,
18		ErrAlreadyExists,
19		ErrNotImplemented,
20		ErrCancelled,
21		ErrDeadline,
22		ErrDataLoss,
23		ErrUnknown:
24		return err
25	case causer:
26		return getImplementer(e.Cause())
27	default:
28		return err
29	}
30}
31
32// IsNotFound returns if the passed in error is an ErrNotFound
33func IsNotFound(err error) bool {
34	_, ok := getImplementer(err).(ErrNotFound)
35	return ok
36}
37
38// IsInvalidParameter returns if the passed in error is an ErrInvalidParameter
39func IsInvalidParameter(err error) bool {
40	_, ok := getImplementer(err).(ErrInvalidParameter)
41	return ok
42}
43
44// IsConflict returns if the passed in error is an ErrConflict
45func IsConflict(err error) bool {
46	_, ok := getImplementer(err).(ErrConflict)
47	return ok
48}
49
50// IsUnauthorized returns if the passed in error is an ErrUnauthorized
51func IsUnauthorized(err error) bool {
52	_, ok := getImplementer(err).(ErrUnauthorized)
53	return ok
54}
55
56// IsUnavailable returns if the passed in error is an ErrUnavailable
57func IsUnavailable(err error) bool {
58	_, ok := getImplementer(err).(ErrUnavailable)
59	return ok
60}
61
62// IsForbidden returns if the passed in error is an ErrForbidden
63func IsForbidden(err error) bool {
64	_, ok := getImplementer(err).(ErrForbidden)
65	return ok
66}
67
68// IsSystem returns if the passed in error is an ErrSystem
69func IsSystem(err error) bool {
70	_, ok := getImplementer(err).(ErrSystem)
71	return ok
72}
73
74// IsNotModified returns if the passed in error is a NotModified error
75func IsNotModified(err error) bool {
76	_, ok := getImplementer(err).(ErrNotModified)
77	return ok
78}
79
80// IsAlreadyExists returns if the passed in error is a AlreadyExists error
81func IsAlreadyExists(err error) bool {
82	_, ok := getImplementer(err).(ErrAlreadyExists)
83	return ok
84}
85
86// IsNotImplemented returns if the passed in error is an ErrNotImplemented
87func IsNotImplemented(err error) bool {
88	_, ok := getImplementer(err).(ErrNotImplemented)
89	return ok
90}
91
92// IsUnknown returns if the passed in error is an ErrUnknown
93func IsUnknown(err error) bool {
94	_, ok := getImplementer(err).(ErrUnknown)
95	return ok
96}
97
98// IsCancelled returns if the passed in error is an ErrCancelled
99func IsCancelled(err error) bool {
100	_, ok := getImplementer(err).(ErrCancelled)
101	return ok
102}
103
104// IsDeadline returns if the passed in error is an ErrDeadline
105func IsDeadline(err error) bool {
106	_, ok := getImplementer(err).(ErrDeadline)
107	return ok
108}
109
110// IsDataLoss returns if the passed in error is an ErrDataLoss
111func IsDataLoss(err error) bool {
112	_, ok := getImplementer(err).(ErrDataLoss)
113	return ok
114}
115