Skip to content

Commit

Permalink
rename context responder
Browse files Browse the repository at this point in the history
  • Loading branch information
xgfone committed May 12, 2024
1 parent 544d699 commit 940d211
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 39 deletions.
2 changes: 1 addition & 1 deletion http/middleware/recover/recover.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func wrappanic(w http.ResponseWriter, r *http.Request) {
if !reqresp.WroteHeader(w) {
w.Header().Set("X-Panic", "1")
err := codeint.ErrInternalServerError.WithMessage("panic")
reqresp.DefaultResponder(w, r, result.Err(err))
reqresp.DefaultRespond(w, r, result.Err(err))
}
}

Expand Down
64 changes: 26 additions & 38 deletions http/reqresp/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ type Context struct {

// Responder is the result responder used by the method Respond.
//
// If nil, use DefaultContextResponder instead.
// If nil, use DefaultContextRespond instead.
Responder func(*Context, result.Response)

// Query and Cookies are used to cache the parsed request query and cookies.
Expand Down Expand Up @@ -571,68 +571,56 @@ func (c *Context) Respond(response result.Response) {
if c.Responder != nil {
c.Responder(c, response)
} else {
DefaultContextResponder(c, response)
DefaultContextRespond(c, response)
}
}

var (
// DefaultResponder is the default result responder.
DefaultResponder = defaultResponder
// DefaultRespond is the default result responder.
DefaultRespond = defaultRespond

// DefaultContextResponder is the default result responder based on Context.
DefaultContextResponder = defaultContextResponder
// DefaultContextRespond is the default result responder based on Context.
DefaultContextRespond = defaultContextRespond

// DefaultContextResponderForCode is the default result responder
// based on Context and StatusCode.
DefaultContextResponderForStatusCode = defaultContextResponderForStatusCode
// DefaultContextRespondByCode is the default result responder
// based on Context and ResponseCode.
DefaultContextRespondByCode = defaultContextRespondByCode
)

// XResponseStatusCode is used to save the response status code
// in the request header or query.
var XResponseStatusCode = "X-Response-Status-Code"
func defaultRespond(w http.ResponseWriter, r *http.Request, response result.Response) {
if c := GetContext(r.Context()); c != nil {
DefaultContextRespond(c, response)
return
}

func getXStatusCode(c *Context, key string) (xcode string) {
xcode = c.Request.Header.Get(key)
if xcode == "" {
xcode = c.GetQuery(key)
rw, ok := w.(ResponseWriter)
if !ok {
rw = AcquireResponseWriter(w)
defer ReleaseResponseWriter(rw)
}
return
DefaultContextRespond(&Context{ResponseWriter: rw, Request: r}, response)
}

func defaultContextResponder(c *Context, response result.Response) {
func defaultContextRespond(c *Context, response result.Response) {
var xcode string
if c.Request != nil {
xcode = getXStatusCode(c, XResponseStatusCode)
if xcode == "" && XResponseStatusCode != "X-Response-Code" {
// Compatible with the old
xcode = getXStatusCode(c, "X-Response-Code")
const XResponseCode = "X-Response-Code"
xcode = c.Request.Header.Get(XResponseCode)
if xcode == "" {
xcode = c.GetQuery(XResponseCode)
}
}
DefaultContextResponderForStatusCode(c, xcode, response)
DefaultContextRespondByCode(c, xcode, response)
}

func defaultContextResponderForStatusCode(c *Context, xcode string, response result.Response) {
func defaultContextRespondByCode(c *Context, xcode string, response result.Response) {
if response.Error == nil {
c.JSON(200, response.Data)
} else {
RespondErrorWithContextByCode(c, xcode, response.Error)
}
}

func defaultResponder(w http.ResponseWriter, r *http.Request, response result.Response) {
if c := GetContext(r.Context()); c != nil {
DefaultContextResponder(c, response)
return
}

rw, ok := w.(ResponseWriter)
if !ok {
rw = AcquireResponseWriter(w)
defer ReleaseResponseWriter(rw)
}
DefaultContextResponder(&Context{ResponseWriter: rw, Request: r}, response)
}

/// ----------------------------------------------------------------------- ///

type byteswrappper struct {
Expand Down

0 comments on commit 940d211

Please sign in to comment.