2022-10-18 13:50:37 +08:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-28 02:20:29 +08:00
// SPDX-License-Identifier: MIT
2022-10-18 13:50:37 +08:00
package util
import (
"errors"
2022-12-31 19:49:37 +08:00
"fmt"
2022-10-18 13:50:37 +08:00
)
// Common Errors forming the base of our error system
//
// Many Errors returned by Gitea can be tested against these errors
// using errors.Is.
var (
ErrInvalidArgument = errors . New ( "invalid argument" )
ErrPermissionDenied = errors . New ( "permission denied" )
ErrAlreadyExist = errors . New ( "resource already exists" )
ErrNotExist = errors . New ( "resource does not exist" )
)
// SilentWrap provides a simple wrapper for a wrapped error where the wrapped error message plays no part in the error message
// Especially useful for "untyped" errors created with "errors.New(…)" that can be classified as 'invalid argument', 'permission denied', 'exists already', or 'does not exist'
type SilentWrap struct {
Message string
Err error
}
// Error returns the message
func ( w SilentWrap ) Error ( ) string {
return w . Message
}
// Unwrap returns the underlying error
func ( w SilentWrap ) Unwrap ( ) error {
return w . Err
}
2022-12-31 19:49:37 +08:00
// NewSilentWrapErrorf returns an error that formats as the given text but unwraps as the provided error
func NewSilentWrapErrorf ( unwrap error , message string , args ... interface { } ) error {
if len ( args ) == 0 {
return SilentWrap { Message : message , Err : unwrap }
}
return SilentWrap { Message : fmt . Sprintf ( message , args ... ) , Err : unwrap }
}
// NewInvalidArgumentErrorf returns an error that formats as the given text but unwraps as an ErrInvalidArgument
func NewInvalidArgumentErrorf ( message string , args ... interface { } ) error {
return NewSilentWrapErrorf ( ErrInvalidArgument , message , args ... )
}
// NewPermissionDeniedErrorf returns an error that formats as the given text but unwraps as an ErrPermissionDenied
func NewPermissionDeniedErrorf ( message string , args ... interface { } ) error {
return NewSilentWrapErrorf ( ErrPermissionDenied , message , args ... )
}
// NewAlreadyExistErrorf returns an error that formats as the given text but unwraps as an ErrAlreadyExist
func NewAlreadyExistErrorf ( message string , args ... interface { } ) error {
return NewSilentWrapErrorf ( ErrAlreadyExist , message , args ... )
}
// NewNotExistErrorf returns an error that formats as the given text but unwraps as an ErrNotExist
func NewNotExistErrorf ( message string , args ... interface { } ) error {
return NewSilentWrapErrorf ( ErrNotExist , message , args ... )
}