53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package nats_transport
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/golang/protobuf/proto"
|
|
"io/ioutil"
|
|
"net/http"
|
|
)
|
|
|
|
// NewResponse creates blank initialized Response object.
|
|
func NewResponse() *Response {
|
|
return &Response{
|
|
StatusCode: int32(200),
|
|
Header: make(map[string]*Values, 0),
|
|
Body: make([]byte, 0),
|
|
}
|
|
}
|
|
|
|
func (resp *Response) ReadFrom(responseData []byte) error {
|
|
if responseData == nil || len(responseData) == 0 {
|
|
return errors.New("response content is empty")
|
|
}
|
|
if err := proto.Unmarshal(responseData, resp); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (resp *Response) ToHTTPResponse(r *http.Request) (*http.Response, error) {
|
|
httpResponse := http.Response{
|
|
Status: fmt.Sprintf("%d %s", resp.StatusCode, http.StatusText(int(resp.StatusCode))),
|
|
StatusCode: int(resp.StatusCode),
|
|
Proto: "HTTP/1.1",
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
Body: ioutil.NopCloser(bytes.NewBuffer(resp.Body)),
|
|
ContentLength: int64(len(resp.Body)),
|
|
Request: r,
|
|
Header: make(http.Header, 0),
|
|
}
|
|
|
|
// copy headers
|
|
for headerName, headerValues := range resp.Header {
|
|
for _, headerValue := range headerValues.Arr {
|
|
httpResponse.Header.Add(headerName, headerValue)
|
|
}
|
|
}
|
|
|
|
return &httpResponse, nil
|
|
}
|