You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.4 KiB
58 lines
1.4 KiB
package render |
|
|
|
import ( |
|
"encoding/json" |
|
"net/http" |
|
|
|
"github.com/pkg/errors" |
|
) |
|
|
|
var jsonContentType = []string{"application/json; charset=utf-8"} |
|
|
|
// JSON common json struct. |
|
type JSON struct { |
|
Code int `json:"code"` |
|
Message string `json:"message"` |
|
TTL int `json:"ttl"` |
|
Data interface{} `json:"data,omitempty"` |
|
} |
|
|
|
func writeJSON(w http.ResponseWriter, obj interface{}) (err error) { |
|
var jsonBytes []byte |
|
writeContentType(w, jsonContentType) |
|
if jsonBytes, err = json.Marshal(obj); err != nil { |
|
err = errors.WithStack(err) |
|
return |
|
} |
|
if _, err = w.Write(jsonBytes); err != nil { |
|
err = errors.WithStack(err) |
|
} |
|
return |
|
} |
|
|
|
// Render (JSON) writes data with json ContentType. |
|
func (r JSON) Render(w http.ResponseWriter) error { |
|
// FIXME(zhoujiahui): the TTL field will be configurable in the future |
|
if r.TTL <= 0 { |
|
r.TTL = 1 |
|
} |
|
return writeJSON(w, r) |
|
} |
|
|
|
// WriteContentType write json ContentType. |
|
func (r JSON) WriteContentType(w http.ResponseWriter) { |
|
writeContentType(w, jsonContentType) |
|
} |
|
|
|
// MapJSON common map json struct. |
|
type MapJSON map[string]interface{} |
|
|
|
// Render (MapJSON) writes data with json ContentType. |
|
func (m MapJSON) Render(w http.ResponseWriter) error { |
|
return writeJSON(w, m) |
|
} |
|
|
|
// WriteContentType write json ContentType. |
|
func (m MapJSON) WriteContentType(w http.ResponseWriter) { |
|
writeContentType(w, jsonContentType) |
|
}
|
|
|