diff --git a/errdefs/errors.go b/errdefs/errors.go new file mode 100644 index 00000000..ff944d1c --- /dev/null +++ b/errdefs/errors.go @@ -0,0 +1,56 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +package errdefs + +import ( + "github.com/pkg/errors" +) + +var ( + // ErrNotFound is returned when an object is not found + ErrNotFound = errors.New("not found") + // ErrAlreadyExists is returned when an object already exists + ErrAlreadyExists = errors.New("already exists") + // ErrUnknown is returned when the error type is unmapped + ErrUnknown = errors.New("unknown") +) + +// IsNotFoundError returns true if the unwrapped error is ErrNotFound +func IsNotFoundError(err error) bool { + return errors.Is(err, ErrNotFound) +} + +// IsAlreadyExistsError returns true if the unwrapped error is ErrAlreadyExists +func IsAlreadyExistsError(err error) bool { + return errors.Is(err, ErrAlreadyExists) +} + +// IsUnknownError returns true if the unwrapped error is ErrUnknown +func IsUnknownError(err error) bool { + return errors.Is(err, ErrUnknown) +} diff --git a/errdefs/errors_test.go b/errdefs/errors_test.go new file mode 100644 index 00000000..a2c2e48e --- /dev/null +++ b/errdefs/errors_test.go @@ -0,0 +1,49 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +package errdefs + +import ( + "testing" + + "github.com/pkg/errors" + "github.com/stretchr/testify/require" +) + +func TestIsNotFound(t *testing.T) { + err := errors.Wrap(ErrNotFound, `object "name"`) + require.True(t, IsNotFoundError(err)) + + require.False(t, IsNotFoundError(errors.New("another error"))) +} + +func TestIsAlreadyExists(t *testing.T) { + err := errors.Wrap(ErrAlreadyExists, `object "name"`) + require.True(t, IsAlreadyExistsError(err)) + + require.False(t, IsAlreadyExistsError(errors.New("another error"))) +}