mirror of
https://github.com/go-gitea/gitea
synced 2025-07-22 18:28:37 +00:00
Refactor error system (#33771)
It should not expose `util.SilentWrap` or construct it manually.
This commit is contained in:
@@ -17,9 +17,9 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
ErrInvalidStructure = util.SilentWrap{Message: "package structure is invalid", Err: util.ErrInvalidArgument}
|
||||
ErrInvalidName = util.SilentWrap{Message: "package name is invalid", Err: util.ErrInvalidArgument}
|
||||
ErrInvalidVersion = util.SilentWrap{Message: "package version is invalid", Err: util.ErrInvalidArgument}
|
||||
ErrInvalidStructure = util.NewInvalidArgumentErrorf("package structure is invalid")
|
||||
ErrInvalidName = util.NewInvalidArgumentErrorf("package name is invalid")
|
||||
ErrInvalidVersion = util.NewInvalidArgumentErrorf("package version is invalid")
|
||||
)
|
||||
|
||||
const (
|
||||
|
@@ -1,13 +0,0 @@
|
||||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package i18n
|
||||
|
||||
import (
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrLocaleAlreadyExist = util.SilentWrap{Message: "lang already exists", Err: util.ErrAlreadyExist}
|
||||
ErrUncertainArguments = util.SilentWrap{Message: "arguments to i18n should not contain uncertain slices", Err: util.ErrInvalidArgument}
|
||||
)
|
@@ -4,6 +4,7 @@
|
||||
package i18n
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
)
|
||||
@@ -30,7 +31,7 @@ func Format(format string, args ...any) (msg string, err error) {
|
||||
fmtArgs = append(fmtArgs, val.Index(i).Interface())
|
||||
}
|
||||
} else {
|
||||
err = ErrUncertainArguments
|
||||
err = errors.New("arguments to i18n should not contain uncertain slices")
|
||||
break
|
||||
}
|
||||
} else {
|
||||
|
@@ -4,6 +4,7 @@
|
||||
package i18n
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"slices"
|
||||
@@ -41,7 +42,7 @@ func NewLocaleStore() LocaleStore {
|
||||
// AddLocaleByIni adds locale by ini into the store
|
||||
func (store *localeStore) AddLocaleByIni(langName, langDesc string, source, moreSource []byte) error {
|
||||
if _, ok := store.localeMap[langName]; ok {
|
||||
return ErrLocaleAlreadyExist
|
||||
return errors.New("lang has already been added")
|
||||
}
|
||||
|
||||
store.langNames = append(store.langNames, langName)
|
||||
|
@@ -22,74 +22,74 @@ var (
|
||||
ErrUnprocessableContent = errors.New("unprocessable content")
|
||||
)
|
||||
|
||||
// SilentWrap provides a simple wrapper for a wrapped error where the wrapped error message plays no part in the error message
|
||||
// errorWrapper 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 {
|
||||
type errorWrapper struct {
|
||||
Message string
|
||||
Err error
|
||||
}
|
||||
|
||||
// Error returns the message
|
||||
func (w SilentWrap) Error() string {
|
||||
func (w errorWrapper) Error() string {
|
||||
return w.Message
|
||||
}
|
||||
|
||||
// Unwrap returns the underlying error
|
||||
func (w SilentWrap) Unwrap() error {
|
||||
func (w errorWrapper) Unwrap() error {
|
||||
return w.Err
|
||||
}
|
||||
|
||||
type LocaleWrap struct {
|
||||
type LocaleWrapper struct {
|
||||
err error
|
||||
TrKey string
|
||||
TrArgs []any
|
||||
}
|
||||
|
||||
// Error returns the message
|
||||
func (w LocaleWrap) Error() string {
|
||||
func (w LocaleWrapper) Error() string {
|
||||
return w.err.Error()
|
||||
}
|
||||
|
||||
// Unwrap returns the underlying error
|
||||
func (w LocaleWrap) Unwrap() error {
|
||||
func (w LocaleWrapper) Unwrap() error {
|
||||
return w.err
|
||||
}
|
||||
|
||||
// NewSilentWrapErrorf returns an error that formats as the given text but unwraps as the provided error
|
||||
func NewSilentWrapErrorf(unwrap error, message string, args ...any) error {
|
||||
// ErrorWrap returns an error that formats as the given text but unwraps as the provided error
|
||||
func ErrorWrap(unwrap error, message string, args ...any) error {
|
||||
if len(args) == 0 {
|
||||
return SilentWrap{Message: message, Err: unwrap}
|
||||
return errorWrapper{Message: message, Err: unwrap}
|
||||
}
|
||||
return SilentWrap{Message: fmt.Sprintf(message, args...), Err: unwrap}
|
||||
return errorWrapper{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 ...any) error {
|
||||
return NewSilentWrapErrorf(ErrInvalidArgument, message, args...)
|
||||
return ErrorWrap(ErrInvalidArgument, message, args...)
|
||||
}
|
||||
|
||||
// NewPermissionDeniedErrorf returns an error that formats as the given text but unwraps as an ErrPermissionDenied
|
||||
func NewPermissionDeniedErrorf(message string, args ...any) error {
|
||||
return NewSilentWrapErrorf(ErrPermissionDenied, message, args...)
|
||||
return ErrorWrap(ErrPermissionDenied, message, args...)
|
||||
}
|
||||
|
||||
// NewAlreadyExistErrorf returns an error that formats as the given text but unwraps as an ErrAlreadyExist
|
||||
func NewAlreadyExistErrorf(message string, args ...any) error {
|
||||
return NewSilentWrapErrorf(ErrAlreadyExist, message, args...)
|
||||
return ErrorWrap(ErrAlreadyExist, message, args...)
|
||||
}
|
||||
|
||||
// NewNotExistErrorf returns an error that formats as the given text but unwraps as an ErrNotExist
|
||||
func NewNotExistErrorf(message string, args ...any) error {
|
||||
return NewSilentWrapErrorf(ErrNotExist, message, args...)
|
||||
return ErrorWrap(ErrNotExist, message, args...)
|
||||
}
|
||||
|
||||
// ErrWrapLocale wraps an err with a translation key and arguments
|
||||
func ErrWrapLocale(err error, trKey string, trArgs ...any) error {
|
||||
return LocaleWrap{err: err, TrKey: trKey, TrArgs: trArgs}
|
||||
// ErrorWrapLocale wraps an err with a translation key and arguments
|
||||
func ErrorWrapLocale(err error, trKey string, trArgs ...any) error {
|
||||
return LocaleWrapper{err: err, TrKey: trKey, TrArgs: trArgs}
|
||||
}
|
||||
|
||||
func ErrAsLocale(err error) *LocaleWrap {
|
||||
var e LocaleWrap
|
||||
func ErrorAsLocale(err error) *LocaleWrapper {
|
||||
var e LocaleWrapper
|
||||
if errors.As(err, &e) {
|
||||
return &e
|
||||
}
|
||||
|
Reference in New Issue
Block a user