@@ -10,13 +10,15 @@ import (
1010 "github.com/pkg/errors"
1111)
1212
13- // json outputs JSON.
13+ // TextWriter outputs plain text
1414type TextWriter struct {
1515 Reporter ErrorReporter
1616 contentType string
1717}
1818
19- // NewPlainWriter returns a json
19+ var _ Writer = (* TextWriter )(nil )
20+
21+ // NewTextWriter returns a plain text writer
2022func NewTextWriter (reporter ErrorReporter , contentType string ) * TextWriter {
2123 if contentType == "" {
2224 contentType = "plain"
@@ -31,12 +33,12 @@ func NewTextWriter(reporter ErrorReporter, contentType string) *TextWriter {
3133}
3234
3335// Write a response object to the ResponseWriter with status code 200.
34- func (h * TextWriter ) Write (w http.ResponseWriter , r * http.Request , e interface {}) {
36+ func (h * TextWriter ) Write (w http.ResponseWriter , r * http.Request , e interface {}, _ ... EncoderOptions ) {
3537 h .WriteCode (w , r , http .StatusOK , e )
3638}
3739
3840// WriteCode writes a response object to the ResponseWriter and sets a response code.
39- func (h * TextWriter ) WriteCode (w http.ResponseWriter , r * http.Request , code int , e interface {}) {
41+ func (h * TextWriter ) WriteCode (w http.ResponseWriter , r * http.Request , code int , e interface {}, _ ... EncoderOptions ) {
4042 if code == 0 {
4143 code = http .StatusOK
4244 }
@@ -56,29 +58,25 @@ func (h *TextWriter) WriteCreated(w http.ResponseWriter, r *http.Request, locati
5658// WriteError writes an error to ResponseWriter and tries to extract the error's status code by
5759// asserting statusCodeCarrier. If the error does not implement statusCodeCarrier, the status code
5860// is set to 500.
59- func (h * TextWriter ) WriteError (w http.ResponseWriter , r * http.Request , err interface {} ) {
60- if s , ok := errors .Cause (toError (err )).(statusCodeCarrier ); ok {
61+ func (h * TextWriter ) WriteError (w http.ResponseWriter , r * http.Request , err error , _ ... Option ) {
62+ if s , ok := errors .Cause (coalesceError (err )).(StatusCodeCarrier ); ok {
6163 h .WriteErrorCode (w , r , s .StatusCode (), err )
6264 return
65+ } else {
66+ h .WriteErrorCode (w , r , http .StatusInternalServerError , err )
6367 }
64-
65- h .WriteErrorCode (w , r , http .StatusInternalServerError , err )
66- return
6768}
6869
6970// WriteErrorCode writes an error to ResponseWriter and forces an error code.
70- func (h * TextWriter ) WriteErrorCode (w http.ResponseWriter , r * http.Request , code int , err interface {}) {
71- e := toError (err )
72- if err == nil {
73- err = e
74- }
71+ func (h * TextWriter ) WriteErrorCode (w http.ResponseWriter , r * http.Request , code int , err error , _ ... Option ) {
72+ err = coalesceError (err )
7573
7674 if code == 0 {
7775 code = http .StatusInternalServerError
7876 }
7977
8078 // All errors land here, so it's a really good idea to do the logging here as well!
81- h .Reporter .ReportError (r , code , e , "An error occurred while handling a request" )
79+ h .Reporter .ReportError (r , code , err , "An error occurred while handling a request" )
8280
8381 w .Header ().Set ("Content-Type" , h .contentType )
8482 w .WriteHeader (code )
0 commit comments