@@ -10,10 +10,11 @@ type ContentTypeResolver func() ([]byte, error)
1010type ContentTypeResolvers map [ContentType ]ContentTypeResolver
1111
1212type HTTPResponse struct {
13- resolvers ContentTypeResolvers
14- StatusCode int `json:"status_code"`
15- Headers map [string ]string `json:"headers"`
16- ExtraData map [string ]interface {}
13+ resolvers ContentTypeResolvers
14+ StatusCode int `json:"status_code"`
15+ Headers map [string ]string `json:"headers"`
16+ ExtraData map [string ]interface {}
17+ IsMultipleResponses bool
1718}
1819type jsonResponse struct {
1920 Data json.RawMessage `json:"data"`
@@ -22,6 +23,9 @@ type jsonResponse struct {
2223 Version string `json:"version,omitempty"`
2324}
2425
26+ // multipleJSONResponse is a wrapper for multiple json responses.
27+ type multipleJSONResponse []jsonResponse
28+
2529func (r HTTPResponse ) MarshalAs (contentType ContentType ) ([]byte , error ) {
2630 if _ , exists := r .resolvers [contentType ]; ! exists {
2731 return nil , fmt .Errorf ("unsupported content-type: %s" , contentType .String ())
@@ -31,6 +35,10 @@ func (r HTTPResponse) MarshalAs(contentType ContentType) ([]byte, error) {
3135 return r .resolvers [contentType ]()
3236 }
3337
38+ if r .IsMultipleResponses {
39+ return r .buildWrappedJSONResponses ()
40+ }
41+
3442 return r .buildWrappedJSONResponse ()
3543}
3644
@@ -110,3 +118,12 @@ func (r *HTTPResponse) buildWrappedJSONResponse() ([]byte, error) {
110118
111119 return json .Marshal (rsp )
112120}
121+
122+ func (r * HTTPResponse ) buildWrappedJSONResponses () ([]byte , error ) {
123+ data , err := r .resolvers [ContentTypeJSON ]()
124+ if err != nil {
125+ return nil , err
126+ }
127+
128+ return data , nil
129+ }
0 commit comments