code.gitea.io/gitea@v1.19.3/modules/util/error.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package util 5 6 import ( 7 "errors" 8 "fmt" 9 ) 10 11 // Common Errors forming the base of our error system 12 // 13 // Many Errors returned by Gitea can be tested against these errors 14 // using errors.Is. 15 var ( 16 ErrInvalidArgument = errors.New("invalid argument") 17 ErrPermissionDenied = errors.New("permission denied") 18 ErrAlreadyExist = errors.New("resource already exists") 19 ErrNotExist = errors.New("resource does not exist") 20 ) 21 22 // SilentWrap provides a simple wrapper for a wrapped error where the wrapped error message plays no part in the error message 23 // Especially useful for "untyped" errors created with "errors.New(…)" that can be classified as 'invalid argument', 'permission denied', 'exists already', or 'does not exist' 24 type SilentWrap struct { 25 Message string 26 Err error 27 } 28 29 // Error returns the message 30 func (w SilentWrap) Error() string { 31 return w.Message 32 } 33 34 // Unwrap returns the underlying error 35 func (w SilentWrap) Unwrap() error { 36 return w.Err 37 } 38 39 // NewSilentWrapErrorf returns an error that formats as the given text but unwraps as the provided error 40 func NewSilentWrapErrorf(unwrap error, message string, args ...interface{}) error { 41 if len(args) == 0 { 42 return SilentWrap{Message: message, Err: unwrap} 43 } 44 return SilentWrap{Message: fmt.Sprintf(message, args...), Err: unwrap} 45 } 46 47 // NewInvalidArgumentErrorf returns an error that formats as the given text but unwraps as an ErrInvalidArgument 48 func NewInvalidArgumentErrorf(message string, args ...interface{}) error { 49 return NewSilentWrapErrorf(ErrInvalidArgument, message, args...) 50 } 51 52 // NewPermissionDeniedErrorf returns an error that formats as the given text but unwraps as an ErrPermissionDenied 53 func NewPermissionDeniedErrorf(message string, args ...interface{}) error { 54 return NewSilentWrapErrorf(ErrPermissionDenied, message, args...) 55 } 56 57 // NewAlreadyExistErrorf returns an error that formats as the given text but unwraps as an ErrAlreadyExist 58 func NewAlreadyExistErrorf(message string, args ...interface{}) error { 59 return NewSilentWrapErrorf(ErrAlreadyExist, message, args...) 60 } 61 62 // NewNotExistErrorf returns an error that formats as the given text but unwraps as an ErrNotExist 63 func NewNotExistErrorf(message string, args ...interface{}) error { 64 return NewSilentWrapErrorf(ErrNotExist, message, args...) 65 }