aboutsummaryrefslogtreecommitdiffstats
path: root/src/dma/vendor/github.com/labstack/echo/context.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/dma/vendor/github.com/labstack/echo/context.go')
-rw-r--r--src/dma/vendor/github.com/labstack/echo/context.go90
1 files changed, 57 insertions, 33 deletions
diff --git a/src/dma/vendor/github.com/labstack/echo/context.go b/src/dma/vendor/github.com/labstack/echo/context.go
index cf780c51..d4722700 100644
--- a/src/dma/vendor/github.com/labstack/echo/context.go
+++ b/src/dma/vendor/github.com/labstack/echo/context.go
@@ -204,6 +204,7 @@ type (
const (
defaultMemory = 32 << 20 // 32 MB
indexPage = "index.html"
+ defaultIndent = " "
)
func (c *context) writeContentType(value string) {
@@ -256,14 +257,13 @@ func (c *context) Scheme() string {
}
func (c *context) RealIP() string {
- ra := c.request.RemoteAddr
if ip := c.request.Header.Get(HeaderXForwardedFor); ip != "" {
- ra = strings.Split(ip, ", ")[0]
- } else if ip := c.request.Header.Get(HeaderXRealIP); ip != "" {
- ra = ip
- } else {
- ra, _, _ = net.SplitHostPort(ra)
+ return strings.Split(ip, ", ")[0]
+ }
+ if ip := c.request.Header.Get(HeaderXRealIP); ip != "" {
+ return ip
}
+ ra, _, _ := net.SplitHostPort(c.request.RemoteAddr)
return ra
}
@@ -404,24 +404,46 @@ func (c *context) String(code int, s string) (err error) {
return c.Blob(code, MIMETextPlainCharsetUTF8, []byte(s))
}
-func (c *context) JSON(code int, i interface{}) (err error) {
+func (c *context) jsonPBlob(code int, callback string, i interface{}) (err error) {
+ enc := json.NewEncoder(c.response)
_, pretty := c.QueryParams()["pretty"]
if c.echo.Debug || pretty {
- return c.JSONPretty(code, i, " ")
+ enc.SetIndent("", " ")
}
- b, err := json.Marshal(i)
- if err != nil {
+ c.writeContentType(MIMEApplicationJavaScriptCharsetUTF8)
+ c.response.WriteHeader(code)
+ if _, err = c.response.Write([]byte(callback + "(")); err != nil {
+ return
+ }
+ if err = enc.Encode(i); err != nil {
+ return
+ }
+ if _, err = c.response.Write([]byte(");")); err != nil {
return
}
- return c.JSONBlob(code, b)
+ return
}
-func (c *context) JSONPretty(code int, i interface{}, indent string) (err error) {
- b, err := json.MarshalIndent(i, "", indent)
- if err != nil {
- return
+func (c *context) json(code int, i interface{}, indent string) error {
+ enc := json.NewEncoder(c.response)
+ if indent != "" {
+ enc.SetIndent("", indent)
+ }
+ c.writeContentType(MIMEApplicationJSONCharsetUTF8)
+ c.response.WriteHeader(code)
+ return enc.Encode(i)
+}
+
+func (c *context) JSON(code int, i interface{}) (err error) {
+ indent := ""
+ if _, pretty := c.QueryParams()["pretty"]; c.echo.Debug || pretty {
+ indent = defaultIndent
}
- return c.JSONBlob(code, b)
+ return c.json(code, i, indent)
+}
+
+func (c *context) JSONPretty(code int, i interface{}, indent string) (err error) {
+ return c.json(code, i, indent)
}
func (c *context) JSONBlob(code int, b []byte) (err error) {
@@ -429,11 +451,7 @@ func (c *context) JSONBlob(code int, b []byte) (err error) {
}
func (c *context) JSONP(code int, callback string, i interface{}) (err error) {
- b, err := json.Marshal(i)
- if err != nil {
- return
- }
- return c.JSONPBlob(code, callback, b)
+ return c.jsonPBlob(code, callback, i)
}
func (c *context) JSONPBlob(code int, callback string, b []byte) (err error) {
@@ -449,24 +467,29 @@ func (c *context) JSONPBlob(code int, callback string, b []byte) (err error) {
return
}
-func (c *context) XML(code int, i interface{}) (err error) {
- _, pretty := c.QueryParams()["pretty"]
- if c.echo.Debug || pretty {
- return c.XMLPretty(code, i, " ")
+func (c *context) xml(code int, i interface{}, indent string) (err error) {
+ c.writeContentType(MIMEApplicationXMLCharsetUTF8)
+ c.response.WriteHeader(code)
+ enc := xml.NewEncoder(c.response)
+ if indent != "" {
+ enc.Indent("", indent)
}
- b, err := xml.Marshal(i)
- if err != nil {
+ if _, err = c.response.Write([]byte(xml.Header)); err != nil {
return
}
- return c.XMLBlob(code, b)
+ return enc.Encode(i)
}
-func (c *context) XMLPretty(code int, i interface{}, indent string) (err error) {
- b, err := xml.MarshalIndent(i, "", indent)
- if err != nil {
- return
+func (c *context) XML(code int, i interface{}) (err error) {
+ indent := ""
+ if _, pretty := c.QueryParams()["pretty"]; c.echo.Debug || pretty {
+ indent = defaultIndent
}
- return c.XMLBlob(code, b)
+ return c.xml(code, i, indent)
+}
+
+func (c *context) XMLPretty(code int, i interface{}, indent string) (err error) {
+ return c.xml(code, i, indent)
}
func (c *context) XMLBlob(code int, b []byte) (err error) {
@@ -574,3 +597,4 @@ func (c *context) Reset(r *http.Request, w http.ResponseWriter) {
// NOTE: Don't reset because it has to have length c.echo.maxParam at all times
// c.pvalues = nil
}
+