barometer: update DMA's vendoring packages
[barometer.git] / src / dma / vendor / github.com / labstack / echo / context.go
index cf780c5..d472270 100644 (file)
@@ -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
 }
+