1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package entry
- import (
- "io"
- "net/http"
- )
- // Response is the cached response will be send to the clients
- // its fields set at runtime on each of the non-cached executions
- // non-cached executions = first execution, and each time after
- // cache expiration datetime passed.
- type Response struct {
- // statusCode for the response cache handler.
- statusCode int
- // body is the contents will be served by the cache handler.
- body []byte
- // the total headers of the response, including content type.
- headers http.Header
- }
- // NewResponse returns a new cached Response.
- func NewResponse(statusCode int, headers http.Header, body []byte) *Response {
- r := new(Response)
- r.SetStatusCode(statusCode)
- r.SetHeaders(headers)
- r.SetBody(body)
- return r
- }
- // SetStatusCode sets a valid status code.
- func (r *Response) SetStatusCode(statusCode int) {
- if statusCode <= 0 {
- statusCode = http.StatusOK
- }
- r.statusCode = statusCode
- }
- // StatusCode returns a valid status code.
- func (r *Response) StatusCode() int {
- return r.statusCode
- }
- // ContentType returns a valid content type
- // func (r *Response) ContentType() string {
- // if r.headers == "" {
- // r.contentType = "text/html; charset=utf-8"
- // }
- // return r.contentType
- // }
- // SetHeaders sets a clone of headers of the cached response.
- func (r *Response) SetHeaders(h http.Header) {
- r.headers = h.Clone()
- }
- // Headers returns the total headers of the cached response.
- func (r *Response) Headers() http.Header {
- return r.headers
- }
- // SetBody consumes "b" and sets the body of the cached response.
- func (r *Response) SetBody(body []byte) {
- r.body = make([]byte, len(body))
- copy(r.body, body)
- }
- // Body returns contents will be served by the cache handler.
- func (r *Response) Body() []byte {
- return r.body
- }
- // Read implements the io.Reader interface.
- func (r *Response) Read(b []byte) (int, error) {
- if len(r.body) == 0 {
- return 0, io.EOF
- }
- n := copy(b, r.body)
- r.body = r.body[n:]
- return n, nil
- }
- // Bytes returns a copy of the cached response body.
- func (r *Response) Bytes() []byte {
- return append([]byte(nil), r.body...)
- }
|