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.
59 lines
1.4 KiB
59 lines
1.4 KiB
6 years ago
|
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)
|
||
|
}
|