Compare commits
No commits in common. "main" and "v0.0.1" have entirely different histories.
23
do.go
23
do.go
@ -2,7 +2,6 @@ package ezhttp
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
@ -11,28 +10,10 @@ func Do(req *http.Request) (*http.Response, error) {
|
||||
return http.DefaultClient.Do(req)
|
||||
}
|
||||
|
||||
func ParseJsonResponse[T any](resp *http.Response) (*T, error) {
|
||||
if resp.StatusCode/100 != 2 {
|
||||
return nil, fmt.Errorf(
|
||||
"request '%s' returned status code %s\nOutput: %s",
|
||||
resp.Request.URL.String(),
|
||||
resp.Status,
|
||||
ReadAllString(resp.Body),
|
||||
)
|
||||
}
|
||||
|
||||
func ParseJsonResponse[T any](r io.Reader) (*T, error) {
|
||||
res := new(T)
|
||||
if err := json.NewDecoder(resp.Body).Decode(res); err != nil {
|
||||
if err := json.NewDecoder(r).Decode(res); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func ReadAllString(r io.Reader) string {
|
||||
data, err := io.ReadAll(r)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not read response body: %w", err).Error()
|
||||
}
|
||||
|
||||
return string(data)
|
||||
}
|
||||
|
2
go.mod
2
go.mod
@ -1,3 +1,3 @@
|
||||
module git.tordarus.net/tordarus/ezhttp
|
||||
module git.milar.in/milarin/ezhttp
|
||||
|
||||
go 1.23.0
|
||||
|
52
request.go
52
request.go
@ -15,7 +15,7 @@ type ValueProvider[T any] func() T
|
||||
type AuthProvider ValueProvider[string]
|
||||
type RequestBodyProvider func() (io.Reader, string)
|
||||
|
||||
func Request(mods ...RequestModifier) *http.Request {
|
||||
func Request(mods ...RequestModifier) (*http.Request, error) {
|
||||
r := NewRequestBuilder()
|
||||
for _, mod := range mods {
|
||||
r = mod(r)
|
||||
@ -92,17 +92,6 @@ func Query(keyValuePairs ...string) RequestModifier {
|
||||
}
|
||||
}
|
||||
|
||||
func RemoveQuery(keys ...string) RequestModifier {
|
||||
return func(r *RequestBuilder) *RequestBuilder {
|
||||
q := r.URL.Query()
|
||||
for _, key := range keys {
|
||||
q.Del(key)
|
||||
}
|
||||
r.URL.RawQuery = q.Encode()
|
||||
return r
|
||||
}
|
||||
}
|
||||
|
||||
func QueryMap(query map[string]string) RequestModifier {
|
||||
return func(r *RequestBuilder) *RequestBuilder {
|
||||
q := r.URL.Query()
|
||||
@ -121,7 +110,7 @@ func Method(method string) RequestModifier {
|
||||
}
|
||||
}
|
||||
|
||||
func AddHeaders(keyValuePairs ...string) RequestModifier {
|
||||
func Headers(keyValuePairs ...string) RequestModifier {
|
||||
if len(keyValuePairs)%2 != 0 {
|
||||
panic("keyValuePairs must have an even length")
|
||||
}
|
||||
@ -134,30 +123,7 @@ func AddHeaders(keyValuePairs ...string) RequestModifier {
|
||||
}
|
||||
}
|
||||
|
||||
func RemoveHeaders(headers ...string) RequestModifier {
|
||||
return func(r *RequestBuilder) *RequestBuilder {
|
||||
for _, header := range headers {
|
||||
r.Header.Del(header)
|
||||
}
|
||||
return r
|
||||
}
|
||||
}
|
||||
|
||||
func RemoveAllHeaders() RequestModifier {
|
||||
return func(r *RequestBuilder) *RequestBuilder {
|
||||
r.Header = make(http.Header)
|
||||
return r
|
||||
}
|
||||
}
|
||||
|
||||
func Headers(keyValuePairs ...string) RequestModifier {
|
||||
return chainMods(
|
||||
RemoveAllHeaders(),
|
||||
AddHeaders(keyValuePairs...),
|
||||
)
|
||||
}
|
||||
|
||||
func AddHeadersMap(headers map[string]string) RequestModifier {
|
||||
func HeadersMap(headers map[string]string) RequestModifier {
|
||||
return func(r *RequestBuilder) *RequestBuilder {
|
||||
for key, value := range headers {
|
||||
r.Header.Add(key, value)
|
||||
@ -166,18 +132,8 @@ func AddHeadersMap(headers map[string]string) RequestModifier {
|
||||
}
|
||||
}
|
||||
|
||||
func HeadersMap(headers map[string]string) RequestModifier {
|
||||
return chainMods(
|
||||
RemoveAllHeaders(),
|
||||
AddHeadersMap(headers),
|
||||
)
|
||||
}
|
||||
|
||||
func Auth(auth AuthProvider) RequestModifier {
|
||||
return chainMods(
|
||||
RemoveHeaders("Authorization"),
|
||||
AddHeaders("Authorization", auth()),
|
||||
)
|
||||
return Headers("Authentication", auth())
|
||||
}
|
||||
|
||||
func Basic(username, password string) AuthProvider {
|
||||
|
@ -30,12 +30,12 @@ func NewRequestBuilderFromRequest(r *http.Request) *RequestBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
func (b *RequestBuilder) Build() *http.Request {
|
||||
func (b *RequestBuilder) Build() (*http.Request, error) {
|
||||
r, err := http.NewRequest(b.Method, b.URL.String(), b.Body)
|
||||
if err != nil {
|
||||
return nil
|
||||
return nil, err
|
||||
}
|
||||
|
||||
r.Header = b.Header
|
||||
return r
|
||||
return r, nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user