-
-
Notifications
You must be signed in to change notification settings - Fork 72
/
response.go
138 lines (98 loc) · 3.41 KB
/
response.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package atreugo
import (
"encoding/json"
"io"
"github.com/valyala/bytebufferpool"
"github.com/valyala/fasthttp"
)
func defaultJSONMarshalFunc(w io.Writer, body any) error {
return json.NewEncoder(w).Encode(body) // nolint:wrapcheck
}
// JSONResponse return response with body in json format.
func (ctx *RequestCtx) JSONResponse(body any, statusCode ...int) error {
ctx.Response.Header.SetContentType("application/json")
if len(statusCode) > 0 {
ctx.Response.Header.SetStatusCode(statusCode[0])
}
w := ctx.Response.BodyWriter()
return ctx.jsonMarshalFunc(w, body) // nolint:wrapcheck
}
// HTTPResponse return response with body in html format.
func (ctx *RequestCtx) HTTPResponse(body string, statusCode ...int) error {
ctx.Response.Header.SetContentType("text/html; charset=utf-8")
if len(statusCode) > 0 {
ctx.Response.Header.SetStatusCode(statusCode[0])
}
ctx.Response.SetBodyString(body)
return nil
}
// HTTPResponseBytes return response with body in html format.
func (ctx *RequestCtx) HTTPResponseBytes(body []byte, statusCode ...int) error {
ctx.Response.Header.SetContentType("text/html; charset=utf-8")
if len(statusCode) > 0 {
ctx.Response.Header.SetStatusCode(statusCode[0])
}
ctx.Response.SetBody(body)
return nil
}
// TextResponse return response with body in text format.
func (ctx *RequestCtx) TextResponse(body string, statusCode ...int) error {
ctx.Response.Header.SetContentType("text/plain; charset=utf-8")
if len(statusCode) > 0 {
ctx.Response.Header.SetStatusCode(statusCode[0])
}
ctx.Response.SetBodyString(body)
return nil
}
// TextResponseBytes return response with body in text format.
func (ctx *RequestCtx) TextResponseBytes(body []byte, statusCode ...int) error {
ctx.Response.Header.SetContentType("text/plain; charset=utf-8")
if len(statusCode) > 0 {
ctx.Response.Header.SetStatusCode(statusCode[0])
}
ctx.Response.SetBody(body)
return nil
}
// RawResponse returns response without encoding the body.
func (ctx *RequestCtx) RawResponse(body string, statusCode ...int) error {
ctx.Response.Header.SetContentType("application/octet-stream")
if len(statusCode) > 0 {
ctx.Response.Header.SetStatusCode(statusCode[0])
}
ctx.Response.SetBodyString(body)
return nil
}
// RawResponseBytes returns response without encoding the body.
func (ctx *RequestCtx) RawResponseBytes(body []byte, statusCode ...int) error {
ctx.Response.Header.SetContentType("application/octet-stream")
if len(statusCode) > 0 {
ctx.Response.Header.SetStatusCode(statusCode[0])
}
ctx.Response.SetBody(body)
return nil
}
// FileResponse return a streaming response with file data.
func (ctx *RequestCtx) FileResponse(fileName, filePath, mimeType string) error {
fasthttp.ServeFile(ctx.RequestCtx, filePath)
buff := bytebufferpool.Get()
buff.SetString("attachment; filename=")
buff.WriteString(fileName) // nolint:errcheck
ctx.Response.Header.Set("Content-Disposition", buff.String())
ctx.SetContentType(mimeType)
bytebufferpool.Put(buff)
return nil
}
// RedirectResponse redirect request to an especific url.
func (ctx *RequestCtx) RedirectResponse(url string, statusCode int) error {
ctx.Redirect(url, statusCode)
return nil
}
// ErrorResponse returns an error response.
func (ctx *RequestCtx) ErrorResponse(err error, statusCode ...int) error {
if len(statusCode) > 0 {
ctx.SetStatusCode(statusCode[0])
} else {
ctx.SetStatusCode(fasthttp.StatusInternalServerError)
}
return err
}