functions

The Fool guy's FAAS
git clone git://git.lair.cx/functions
Log | Files | Refs | README

req.go (914B)


      1 package httpx
      2 
      3 import (
      4 	"bytes"
      5 	"net/http"
      6 )
      7 
      8 type RequestBuilder struct {
      9 	err error
     10 	req *http.Request
     11 }
     12 
     13 func Request(
     14 	method string,
     15 	url string,
     16 	body []byte,
     17 ) *RequestBuilder {
     18 	var bodyReader *bytes.Reader
     19 
     20 	if body != nil {
     21 		bodyReader = bytes.NewReader(body)
     22 	}
     23 
     24 	req, err := http.NewRequest(method, url, bodyReader)
     25 
     26 	return &RequestBuilder{
     27 		err: err,
     28 		req: req,
     29 	}
     30 }
     31 
     32 func (b *RequestBuilder) WithHeader(key, value string) *RequestBuilder {
     33 	if b.err != nil {
     34 		return b
     35 	}
     36 
     37 	b.req.Header.Add(key, value)
     38 	return b
     39 }
     40 
     41 func (b *RequestBuilder) WithHeaders(headers http.Header) *RequestBuilder {
     42 	if b.err != nil {
     43 		return b
     44 	}
     45 
     46 	for key, values := range headers {
     47 		for _, value := range values {
     48 			b.req.Header.Add(key, value)
     49 		}
     50 	}
     51 
     52 	return b
     53 }
     54 
     55 func (b *RequestBuilder) Do(client *http.Client) (*http.Response, error) {
     56 	if b.err != nil {
     57 		return nil, b.err
     58 	}
     59 
     60 	return client.Do(b.req)
     61 }