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 }