From c7a3a0da91a8cd4ceda657f758b00883106c3222 Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sat, 22 Jan 2022 00:05:09 +0300 Subject: [PATCH 1/9] fix new errors --- app.go | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/app.go b/app.go index 9abd4e9dbf..0b2ac1c213 100644 --- a/app.go +++ b/app.go @@ -88,6 +88,11 @@ type Error struct { Message string `json:"message"` } +type Errors struct { + Code int `json:"code"` + Messages []string `json:"messages"` +} + // App denotes the Fiber application. type App struct { mutex sync.Mutex @@ -698,6 +703,11 @@ func (e *Error) Error() string { return e.Message } +// Errors make it compatible with the `multiple errors` interface. +func (e *Errors) Errors() []string { + return e.Messages +} + // NewError creates a new Error instance with an optional message func NewError(code int, message ...string) *Error { e := &Error{ @@ -711,27 +721,15 @@ func NewError(code int, message ...string) *Error { return e } -// NewErrors creates multiple new Errors instance with some message -func NewErrors(code int, messages ...string) []*Error { - var errors []*Error +// NewErrors creates multiple new Error messages +func NewErrors(code int, messages ...string) *Errors { + e := &Errors{ + Code: code, + } if len(messages) > 0 { - for _, message := range messages { - e := &Error{ - Code: code, - } - e.Message = message - errors = append(errors, e) - } - } else { - // Use default messages - e := &Error{ - Code: code, - } - e.Message = utils.StatusMessage(code) - errors = append(errors, e) + e.Messages = append(e.Messages, messages...) } - - return errors + return e } // Listener can be used to pass a custom listener. From 79c793620001ae7d097de8c0ff21ca1557972506 Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sat, 22 Jan 2022 00:05:15 +0300 Subject: [PATCH 2/9] fix tests --- app_test.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app_test.go b/app_test.go index 8ab7594e0d..0fefeecc3d 100644 --- a/app_test.go +++ b/app_test.go @@ -1168,11 +1168,9 @@ func Test_NewError(t *testing.T) { func Test_NewErrors(t *testing.T) { errors := NewErrors(StatusBadRequest, []string{"error 1", "error 2"}...) - utils.AssertEqual(t, StatusBadRequest, errors[0].Code) - utils.AssertEqual(t, "error 1", errors[0].Message) - - utils.AssertEqual(t, StatusBadRequest, errors[1].Code) - utils.AssertEqual(t, "error 2", errors[1].Message) + utils.AssertEqual(t, StatusBadRequest, errors.Code) + utils.AssertEqual(t, "error 1", errors.Messages[0]) + utils.AssertEqual(t, "error 2", errors.Messages[1]) } // go test -run Test_Test_Timeout From 14202c5390984a68e8de21bc5a3afcfd46aca9fc Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sat, 22 Jan 2022 02:08:22 +0300 Subject: [PATCH 3/9] removed new errors tests --- app_test.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app_test.go b/app_test.go index 0fefeecc3d..c9d1f9b553 100644 --- a/app_test.go +++ b/app_test.go @@ -1166,13 +1166,6 @@ func Test_NewError(t *testing.T) { utils.AssertEqual(t, "permission denied", e.Message) } -func Test_NewErrors(t *testing.T) { - errors := NewErrors(StatusBadRequest, []string{"error 1", "error 2"}...) - utils.AssertEqual(t, StatusBadRequest, errors.Code) - utils.AssertEqual(t, "error 1", errors.Messages[0]) - utils.AssertEqual(t, "error 2", errors.Messages[1]) -} - // go test -run Test_Test_Timeout func Test_Test_Timeout(t *testing.T) { app := New() From a66ee8371d5f67b440e75fdbd5c819084339c5c2 Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sat, 22 Jan 2022 02:10:27 +0300 Subject: [PATCH 4/9] changed error message type --- app.go | 36 +++++++----------------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/app.go b/app.go index 0b2ac1c213..2deb6c133e 100644 --- a/app.go +++ b/app.go @@ -84,13 +84,8 @@ type ErrorHandler = func(*Ctx, error) error // Error represents an error that occurred while handling a request. type Error struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type Errors struct { - Code int `json:"code"` - Messages []string `json:"messages"` + Code int `json:"code"` + Message interface{} `json:"message"` } // App denotes the Fiber application. @@ -700,34 +695,17 @@ func (app *App) Group(prefix string, handlers ...Handler) Router { // Error makes it compatible with the `error` interface. func (e *Error) Error() string { - return e.Message -} - -// Errors make it compatible with the `multiple errors` interface. -func (e *Errors) Errors() []string { - return e.Messages + return fmt.Sprintf("%v", e.Message) } // NewError creates a new Error instance with an optional message -func NewError(code int, message ...string) *Error { +func NewError(code int, message ...interface{}) *Error { e := &Error{ - Code: code, + Code: code, + Message: utils.StatusMessage(code), } if len(message) > 0 { - e.Message = message[0] - } else { - e.Message = utils.StatusMessage(code) - } - return e -} - -// NewErrors creates multiple new Error messages -func NewErrors(code int, messages ...string) *Errors { - e := &Errors{ - Code: code, - } - if len(messages) > 0 { - e.Messages = append(e.Messages, messages...) + e.Message = message } return e } From 1cd462465116ef9a8166fdc38b9e0e9c65fbf950 Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sat, 22 Jan 2022 02:19:41 +0300 Subject: [PATCH 5/9] fixed NewError test --- app_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_test.go b/app_test.go index c9d1f9b553..a09cafebf8 100644 --- a/app_test.go +++ b/app_test.go @@ -1163,7 +1163,7 @@ func Benchmark_App_ETag_Weak(b *testing.B) { func Test_NewError(t *testing.T) { e := NewError(StatusForbidden, "permission denied") utils.AssertEqual(t, StatusForbidden, e.Code) - utils.AssertEqual(t, "permission denied", e.Message) + utils.AssertEqual(t, "permission denied", fmt.Sprintf("%v", e.Message)) } // go test -run Test_Test_Timeout From 61dbddf002c9b5d9bbec86799abe923432c19121 Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sat, 22 Jan 2022 02:19:55 +0300 Subject: [PATCH 6/9] added NewErrors function --- app.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app.go b/app.go index 2deb6c133e..1f247119ac 100644 --- a/app.go +++ b/app.go @@ -705,7 +705,18 @@ func NewError(code int, message ...interface{}) *Error { Message: utils.StatusMessage(code), } if len(message) > 0 { - e.Message = message + e.Message = message[0] + } + return e +} + +func NewErrors(code int, messages ...interface{}) *Error { + e := &Error{ + Code: code, + Message: utils.StatusMessage(code), + } + if len(messages) > 0 { + e.Message = messages } return e } From 5da495b7f60a2e7e4930e0a7fa41c4d79feb8e92 Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sat, 22 Jan 2022 02:25:29 +0300 Subject: [PATCH 7/9] added Test_NewErrors --- app_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app_test.go b/app_test.go index a09cafebf8..b529402949 100644 --- a/app_test.go +++ b/app_test.go @@ -1166,6 +1166,14 @@ func Test_NewError(t *testing.T) { utils.AssertEqual(t, "permission denied", fmt.Sprintf("%v", e.Message)) } +func Test_NewErrors(t *testing.T) { + e := NewErrors(StatusBadRequest, "error 1", "error 2") + messages := e.Message.([]interface{}) + utils.AssertEqual(t, StatusBadRequest, e.Code) + utils.AssertEqual(t, "error 1", fmt.Sprintf("%v", messages[0])) + utils.AssertEqual(t, "error 2", fmt.Sprintf("%v", messages[1])) +} + // go test -run Test_Test_Timeout func Test_Test_Timeout(t *testing.T) { app := New() From ddd8c404507f240b773b8d078b00a6f100a41466 Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sat, 22 Jan 2022 02:28:48 +0300 Subject: [PATCH 8/9] added comment line --- app.go | 1 + 1 file changed, 1 insertion(+) diff --git a/app.go b/app.go index 1f247119ac..a953d4df21 100644 --- a/app.go +++ b/app.go @@ -710,6 +710,7 @@ func NewError(code int, message ...interface{}) *Error { return e } +// NewErrors creates multiple new Error messages func NewErrors(code int, messages ...interface{}) *Error { e := &Error{ Code: code, From c34a33d1abb92b751c1b026cd5b0eaa1ecf856a4 Mon Sep 17 00:00:00 2001 From: Eren BALCI Date: Sun, 23 Jan 2022 13:05:08 +0300 Subject: [PATCH 9/9] refactor: Sprintf changed with Sprint --- app.go | 2 +- app_test.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app.go b/app.go index a953d4df21..56b0caea7c 100644 --- a/app.go +++ b/app.go @@ -695,7 +695,7 @@ func (app *App) Group(prefix string, handlers ...Handler) Router { // Error makes it compatible with the `error` interface. func (e *Error) Error() string { - return fmt.Sprintf("%v", e.Message) + return fmt.Sprint(e.Message) } // NewError creates a new Error instance with an optional message diff --git a/app_test.go b/app_test.go index b529402949..37ec453640 100644 --- a/app_test.go +++ b/app_test.go @@ -1163,15 +1163,15 @@ func Benchmark_App_ETag_Weak(b *testing.B) { func Test_NewError(t *testing.T) { e := NewError(StatusForbidden, "permission denied") utils.AssertEqual(t, StatusForbidden, e.Code) - utils.AssertEqual(t, "permission denied", fmt.Sprintf("%v", e.Message)) + utils.AssertEqual(t, "permission denied", fmt.Sprint(e.Message)) } func Test_NewErrors(t *testing.T) { e := NewErrors(StatusBadRequest, "error 1", "error 2") messages := e.Message.([]interface{}) utils.AssertEqual(t, StatusBadRequest, e.Code) - utils.AssertEqual(t, "error 1", fmt.Sprintf("%v", messages[0])) - utils.AssertEqual(t, "error 2", fmt.Sprintf("%v", messages[1])) + utils.AssertEqual(t, "error 1", fmt.Sprint(messages[0])) + utils.AssertEqual(t, "error 2", fmt.Sprint(messages[1])) } // go test -run Test_Test_Timeout