nats-transport/response.go
jar3b@outlook.com 0b9114e50c feat: WIP
2021-09-23 02:42:00 +03:00

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
}