forked from 88250/gulu
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathret.go
103 lines (81 loc) · 2.52 KB
/
ret.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
// Gulu - Golang common utilities for everyone.
// Copyright (c) 2019-present, b3log.org
//
// Gulu is licensed under Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of Mulan PSL v2 at:
// http://license.coscl.org.cn/MulanPSL2
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
// See the Mulan PSL v2 for more details.
package gulu
import (
"compress/gzip"
"encoding/json"
"net/http"
)
// Result represents a common-used result struct.
type Result struct {
Code int `json:"code"` // return code
Msg string `json:"msg"` // message
Data interface{} `json:"data"` // data object
}
// NewResult creates a result with Code=0, Msg="", Data=nil.
func (*GuluRet) NewResult() *Result {
return &Result{
Code: 0,
Msg: "",
Data: nil,
}
}
// RetResult writes HTTP response with "Content-Type, application/json".
func (*GuluRet) RetResult(w http.ResponseWriter, r *http.Request, res *Result) {
w.Header().Set("Content-Type", "application/json")
data, err := json.Marshal(res)
if err != nil {
logger.Error(err)
return
}
w.Write(data)
}
// RetGzResult writes HTTP response with "Content-Type, application/json" and "Content-Encoding, gzip".
func (*GuluRet) RetGzResult(w http.ResponseWriter, r *http.Request, res *Result) {
w.Header().Set("Content-Type", "application/json")
w.Header().Set("Content-Encoding", "gzip")
gz := gzip.NewWriter(w)
err := json.NewEncoder(gz).Encode(res)
if nil != err {
logger.Error(err)
return
}
err = gz.Close()
if nil != err {
logger.Error(err)
return
}
}
// RetJSON writes HTTP response with "Content-Type, application/json".
func (*GuluRet) RetJSON(w http.ResponseWriter, r *http.Request, res map[string]interface{}) {
w.Header().Set("Content-Type", "application/json")
data, err := json.Marshal(res)
if err != nil {
logger.Error(err)
return
}
w.Write(data)
}
// RetGzJSON writes HTTP response with "Content-Type, application/json" and "Content-Encoding, gzip".
func (*GuluRet) RetGzJSON(w http.ResponseWriter, r *http.Request, res map[string]interface{}) {
w.Header().Set("Content-Type", "application/json")
w.Header().Set("Content-Encoding", "gzip")
gz := gzip.NewWriter(w)
err := json.NewEncoder(gz).Encode(res)
if nil != err {
logger.Error(err)
return
}
err = gz.Close()
if nil != err {
logger.Error(err)
return
}
}