@@ -316,7 +316,7 @@ func do(client *http.Client, req *http.Request, accept string, strict bool, out
316316 defer response .Body .Close ()
317317
318318 // Get content type
319- mimetype , err := respContentType (response )
319+ mimetype , err := types . ParseContentType (response . Header . Get ( types . ContentTypeHeader ) )
320320 if err != nil {
321321 return err
322322 }
@@ -381,7 +381,7 @@ func do(client *http.Client, req *http.Request, accept string, strict bool, out
381381 }
382382
383383 switch {
384- case mimetype == types .ContentTypeJSON || mimetype == types .ContentTypeJSONStream :
384+ case mimetype == types .ContentTypeJSON || mimetype == types .ContentTypeJSONStream || mimetype == types . ContentTypeJSONStreamLegacy :
385385 dec := json .NewDecoder (response .Body )
386386 if reqopts .jsonStreamCallback != nil {
387387 for {
@@ -408,6 +408,24 @@ func do(client *http.Client, req *http.Request, accept string, strict bool, out
408408 return err
409409 }
410410 }
411+ case mimetype == types .ContentTypeTextStream :
412+ if reqopts .textStreamCallback != nil {
413+ stream := NewTextStream ()
414+ if err := stream .Decode (response .Body , reqopts .textStreamCallback ); err != nil {
415+ return err
416+ }
417+ return nil
418+ }
419+ if out == nil {
420+ return nil
421+ }
422+ if v , ok := out .(io.Writer ); ok {
423+ if _ , err := io .Copy (v , response .Body ); err != nil {
424+ return err
425+ }
426+ return nil
427+ }
428+ return httpresponse .ErrInternalError .Withf ("do: response does not implement Unmarshaler for %q" , mimetype )
411429 case mimetype == types .ContentTypeTextXml || mimetype == types .ContentTypeXML :
412430 if err := xml .NewDecoder (response .Body ).Decode (out ); err != nil {
413431 return err
@@ -442,16 +460,3 @@ func do(client *http.Client, req *http.Request, accept string, strict bool, out
442460 // Return success
443461 return nil
444462}
445-
446- // Parse the response content type
447- func respContentType (resp * http.Response ) (string , error ) {
448- contenttype := resp .Header .Get ("Content-Type" )
449- if contenttype == "" {
450- return types .ContentTypeBinary , nil
451- }
452- if mimetype , err := types .ParseContentType (contenttype ); err != nil {
453- return contenttype , httpresponse .Err (http .StatusUnsupportedMediaType ).With (contenttype )
454- } else {
455- return mimetype , nil
456- }
457- }
0 commit comments