github.com/storacha/go-ucanto@v0.7.2/transport/http/response.go (about)

     1  package http
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"net/http"
     7  	"net/url"
     8  
     9  	"github.com/storacha/go-ucanto/transport"
    10  )
    11  
    12  type Request struct {
    13  	url  *url.URL
    14  	hdrs http.Header
    15  	body io.Reader
    16  }
    17  
    18  func (req *Request) URL() *url.URL {
    19  	return req.url
    20  }
    21  
    22  func (req *Request) Headers() http.Header {
    23  	return req.hdrs
    24  }
    25  
    26  func (req *Request) Body() io.Reader {
    27  	return req.body
    28  }
    29  
    30  var _ transport.HTTPRequest = (*Request)(nil)
    31  var _ transport.InboundHTTPRequest = (*Request)(nil)
    32  
    33  type Response struct {
    34  	ctx    context.Context
    35  	status int
    36  	hdrs   http.Header
    37  	body   io.ReadCloser
    38  }
    39  
    40  func (res *Response) Status() int {
    41  	return res.status
    42  }
    43  
    44  func (res *Response) Headers() http.Header {
    45  	return res.hdrs
    46  }
    47  
    48  func (res *Response) Body() io.ReadCloser {
    49  	return res.body
    50  }
    51  
    52  func (res *Response) Context() context.Context {
    53  	if res.ctx == nil {
    54  		return context.Background()
    55  	}
    56  	return res.ctx
    57  }
    58  
    59  var _ transport.HTTPResponse = (*Response)(nil)
    60  
    61  func NewResponse(status int, body io.ReadCloser, headers http.Header) *Response {
    62  	return NewResponseWithContext(context.Background(), status, body, headers)
    63  }
    64  
    65  func NewResponseWithContext(ctx context.Context, status int, body io.ReadCloser, headers http.Header) *Response {
    66  	if ctx == nil {
    67  		ctx = context.Background()
    68  	}
    69  	return &Response{ctx: ctx, status: status, hdrs: headers, body: body}
    70  }
    71  
    72  // NewRequest creates a [transport.HTTPRequest]
    73  func NewRequest(body io.Reader, headers http.Header) *Request {
    74  	return &Request{nil, headers, body}
    75  }
    76  
    77  // NewInboundRequest creates a [transport.InboundHTTPRequest] - a request that
    78  // also has a URL.
    79  func NewInboundRequest(url *url.URL, body io.Reader, headers http.Header) *Request {
    80  	return &Request{url, headers, body}
    81  }