♻️ Use standard getter/setter names

This commit is contained in:
Dan Jones 2024-01-19 22:37:13 -06:00
commit f27c669aeb
5 changed files with 41 additions and 37 deletions

View file

@ -14,7 +14,7 @@ import (
//
// If you want a different user message, use Msg, such as:
//
// err := errors.Errorf(http.StatusNotFound, "%w", sqlError).Msg("user not found %d", userId)
// err := errors.Errorf(http.StatusNotFound, "%w", sqlError).SetMsg("user not found %d", userId)
func Errorf(status int, format string, parts ...any) SettableError {
if len(parts) == 0 {
return &erf{status, format, ""}
@ -41,7 +41,7 @@ type erf struct {
msg string
}
func (e *erf) GetStatus() int {
func (e *erf) Status() int {
if e.stat < http.StatusContinue || e.stat >= 600 {
e.stat = http.StatusInternalServerError
}
@ -52,15 +52,15 @@ func (e *erf) Error() string {
return e.err
}
func (e *erf) GetMsg() string {
func (e *erf) Msg() string {
if e.msg == "" {
return e.err
}
return e.msg
}
func (e *erf) Status(status int) SettableError {
// GetStatus already handles invalid values, so we'll just ignore this.
func (e *erf) SetStatus(status int) SettableError {
// Status already handles invalid values, so we'll just ignore this.
if status < http.StatusContinue || status >= 600 {
return e
}
@ -68,7 +68,7 @@ func (e *erf) Status(status int) SettableError {
return e
}
func (e *erf) Msg(msg string, parts ...any) SettableError {
func (e *erf) SetMsg(msg string, parts ...any) SettableError {
e.msg = msg
if len(parts) > 0 {
e.msg = fmt.Sprintf(msg, parts...)

View file

@ -28,8 +28,8 @@ func (s *ErrorfTestSuite) TestNoWrap() {
exp := "42 is more than 13"
s.Assert().Equal(exp, err.Error())
s.Assert().Equal(exp, err.GetMsg())
s.Assert().Equal(http.StatusTeapot, err.GetStatus())
s.Assert().Equal(exp, err.Msg())
s.Assert().Equal(http.StatusTeapot, err.Status())
}
func (s *ErrorfTestSuite) TestWrapOne() {
@ -45,7 +45,7 @@ func (s *ErrorfTestSuite) TestWrapOne() {
exp := "I'm a little teapot. Here is my handle."
s.Assert().Equal(exp, we.Error())
s.Assert().Equal(exp, we.GetMsg())
s.Assert().Equal(exp, we.Msg())
s.Assert().Same(wrapped, we.Unwrap())
}
@ -63,7 +63,7 @@ func (s *ErrorfTestSuite) TestWrapTwo() {
exp := "I'm a little teapot: short and stout. Here is my handle."
s.Assert().Equal(exp, we.Error())
s.Assert().Equal(exp, we.GetMsg())
s.Assert().Equal(exp, we.Msg())
unwrapped := we.Unwrap()
s.Assert().Len(unwrapped, 2)
s.Assert().Same(wrappedOne, unwrapped[0])
@ -74,31 +74,31 @@ func (s *ErrorfTestSuite) TestSet() {
var err SettableError = Errorf(http.StatusTeapot, "Unable to BREW")
s.Assert().NotNil(err)
err.Status(http.StatusTooEarly).Msg("It's only %dAM", 2)
s.Assert().Equal(http.StatusTooEarly, err.GetStatus())
s.Assert().Equal("It's only 2AM", err.GetMsg())
err.SetStatus(http.StatusTooEarly).SetMsg("It's only %dAM", 2)
s.Assert().Equal(http.StatusTooEarly, err.Status())
s.Assert().Equal("It's only 2AM", err.Msg())
s.Assert().Equal("Unable to BREW", err.Error())
err.Msg("I am so great")
s.Assert().Equal("I am so great", err.GetMsg())
err.SetMsg("I am so great")
s.Assert().Equal("I am so great", err.Msg())
}
func (s *ErrorfTestSuite) TestGetStatusOutsideRange() {
var err ResponsableError = Errorf(5, "Hello")
s.Assert().NotNil(err)
s.Assert().Equal(http.StatusInternalServerError, err.GetStatus())
s.Assert().Equal(http.StatusInternalServerError, err.Status())
err = Errorf(5, "Hello")
s.Assert().NotNil(err)
s.Assert().Equal(http.StatusInternalServerError, err.GetStatus())
s.Assert().Equal(http.StatusInternalServerError, err.Status())
}
func (s *ErrorfTestSuite) TestSetStatusOutsideRange() {
var err SettableError = Errorf(http.StatusPaymentRequired, "Hello")
s.Assert().NotNil(err)
err.Status(10)
s.Assert().Equal(http.StatusPaymentRequired, err.GetStatus())
err.Status(600)
s.Assert().Equal(http.StatusPaymentRequired, err.GetStatus())
err.SetStatus(10)
s.Assert().Equal(http.StatusPaymentRequired, err.Status())
err.SetStatus(600)
s.Assert().Equal(http.StatusPaymentRequired, err.Status())
}

View file

@ -3,25 +3,29 @@ package errors
// ResponsableError is an error that has information useful in an HTTP response.
// The string returned by Error should be suitable for logging useful information
// to assist debugging the error.
// GetStatus should return an appropriate HTTP status.
// GetMsg should return a message suitable to display to the end user. If the message
//
// Status should return an appropriate HTTP status. It must not return < 100 || >= 600.
//
// Msg should return a message suitable to display to the end user. If the message
// returned by Error is safe for the end user, it may simply call that.
// GetStatus should not return a value outside of the 100 - 599 range.
type ResponsableError interface {
Error() string
GetStatus() int
GetMsg() string
Status() int
Msg() string
}
// SettableError is a ResponsableError which can be modified after initial creation.
// The Status method can set the status, while the Msg method can set user message.
//
// The SetStatus method can set the status, while the SetMsg method can set user message.
// If any values are passed after the message, it should be passed to fmt.Sprintf for formatting.
//
// Methods are chainable.
//
// SetStatus should not use a value outside of 100-599. It may either ignore such values, or panic.
type SettableError interface {
ResponsableError
Status(int) SettableError
Msg(string, ...any) SettableError
SetStatus(int) SettableError
SetMsg(string, ...any) SettableError
}
// UnwrappableError allows a ResponsableError to wrap another error.

2
new.go
View file

@ -24,5 +24,5 @@ func NewBadRequest(format string, parts ...any) SettableError {
func NewInternalError(format string, parts ...any) SettableError {
status := http.StatusInternalServerError
msg := "Unknown Error"
return Errorf(status, format, parts...).Msg(msg)
return Errorf(status, format, parts...).SetMsg(msg)
}

View file

@ -19,8 +19,8 @@ func (s *NewTestSuite) TestNotFound() {
msg := "I can't see you"
var err ResponsableError = NewNotFound(msg)
s.Assert().NotNil(err)
s.Assert().Equal(http.StatusNotFound, err.GetStatus())
s.Assert().Equal(msg, err.GetMsg())
s.Assert().Equal(http.StatusNotFound, err.Status())
s.Assert().Equal(msg, err.Msg())
s.Assert().Equal(msg, err.Error())
}
@ -28,7 +28,7 @@ func (s *NewTestSuite) TestNotFoundDefaultMsg() {
msg := "Not Found"
var err ResponsableError = NewNotFound("")
s.Assert().NotNil(err)
s.Assert().Equal(msg, err.GetMsg())
s.Assert().Equal(msg, err.Msg())
s.Assert().Equal(msg, err.Error())
}
@ -36,8 +36,8 @@ func (s *NewTestSuite) TestBadRequest() {
msg := "I can't see you"
var err ResponsableError = NewBadRequest(msg)
s.Assert().NotNil(err)
s.Assert().Equal(http.StatusBadRequest, err.GetStatus())
s.Assert().Equal(msg, err.GetMsg())
s.Assert().Equal(http.StatusBadRequest, err.Status())
s.Assert().Equal(msg, err.Msg())
s.Assert().Equal(msg, err.Error())
}
@ -45,7 +45,7 @@ func (s *NewTestSuite) TestBadRequestDefaultMsg() {
msg := "Bad Request"
var err ResponsableError = NewBadRequest("")
s.Assert().NotNil(err)
s.Assert().Equal(msg, err.GetMsg())
s.Assert().Equal(msg, err.Msg())
s.Assert().Equal(msg, err.Error())
}
@ -53,5 +53,5 @@ func (s *NewTestSuite) TestInternal() {
var err ResponsableError = NewInternalError("%d > %d", 42, 13)
s.Assert().NotNil(err)
s.Assert().Equal("42 > 13", err.Error())
s.Assert().Equal("Unknown Error", err.GetMsg())
s.Assert().Equal("Unknown Error", err.Msg())
}