@@ -28,23 +28,20 @@ var (
28
28
)
29
29
30
30
// NewResponeEmitter returns a new ResponseEmitter.
31
- func NewResponseEmitter (w http.ResponseWriter , method string , req * cmds.Request ) ResponseEmitter {
32
- encType := cmds .GetEncoding (req )
33
-
34
- var enc cmds.Encoder
35
-
36
- if _ , ok := cmds .Encoders [encType ]; ok {
37
- enc = cmds.Encoders [encType ](req )(w )
31
+ func NewResponseEmitter (w http.ResponseWriter , method string , req * cmds.Request ) (ResponseEmitter , error ) {
32
+ encType , valEnc , errEnc , err := cmds .GetEncoders (req , w )
33
+ if err != nil {
34
+ return nil , err
38
35
}
39
-
40
36
re := & responseEmitter {
41
37
w : w ,
42
38
encType : encType ,
43
- enc : enc ,
39
+ errEnc : errEnc ,
40
+ valEnc : valEnc ,
44
41
method : method ,
45
42
req : req ,
46
43
}
47
- return re
44
+ return re , nil
48
45
}
49
46
50
47
type ResponseEmitter interface {
@@ -55,7 +52,8 @@ type ResponseEmitter interface {
55
52
type responseEmitter struct {
56
53
w http.ResponseWriter
57
54
58
- enc cmds.Encoder
55
+ errEnc cmds.Encoder
56
+ valEnc cmds.Encoder // overrides the normal encoder
59
57
encType cmds.EncodingType
60
58
req * cmds.Request
61
59
@@ -121,7 +119,7 @@ func (re *responseEmitter) Emit(value interface{}) error {
121
119
case io.Reader :
122
120
err = flushCopy (re .w , v )
123
121
default :
124
- err = re .enc .Encode (value )
122
+ err = re .valEnc .Encode (value )
125
123
}
126
124
127
125
if isSingle && err == nil {
@@ -259,7 +257,7 @@ func (re *responseEmitter) doPreamble(value interface{}) {
259
257
err = & cmdkit.Error {Message : err .Error ()}
260
258
}
261
259
262
- err = re .enc .Encode (err )
260
+ err = re .errEnc .Encode (err )
263
261
if err != nil {
264
262
log .Error ("error sending error value after non-200 response" , err )
265
263
}
@@ -272,10 +270,6 @@ type responseWriterer interface {
272
270
Lower () http.ResponseWriter
273
271
}
274
272
275
- func (re * responseEmitter ) SetEncoder (enc func (io.Writer ) cmds.Encoder ) {
276
- re .enc = enc (re .w )
277
- }
278
-
279
273
func flushCopy (w io.Writer , r io.Reader ) error {
280
274
buf := make ([]byte , 4096 )
281
275
f , ok := w .(http.Flusher )
0 commit comments