1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-11-18 04:42:54 +00:00
arikawa/internal/httputil/http.go

37 lines
783 B
Go
Raw Normal View History

2020-01-02 05:39:52 +00:00
package httputil
2020-01-16 04:27:57 +00:00
import (
"net/http"
)
2020-01-02 05:39:52 +00:00
type TransportWrapper struct {
Default http.RoundTripper
Pre func(*http.Request) error
Post func(*http.Request, *http.Response) error
2020-01-02 05:39:52 +00:00
}
var _ http.RoundTripper = (*TransportWrapper)(nil)
2020-01-02 05:39:52 +00:00
func NewTransportWrapper() *TransportWrapper {
return &TransportWrapper{
Default: http.DefaultTransport,
Pre: func(*http.Request) error { return nil },
Post: func(*http.Request, *http.Response) error { return nil },
2020-01-02 05:39:52 +00:00
}
}
func (c *TransportWrapper) RoundTrip(req *http.Request) (r *http.Response, err error) {
2020-01-02 05:39:52 +00:00
if err := c.Pre(req); err != nil {
return nil, err
}
r, err = c.Default.RoundTrip(req)
2020-01-02 05:39:52 +00:00
// Call Post regardless of error:
if postErr := c.Post(req, r); postErr != nil {
return r, postErr
2020-01-02 05:39:52 +00:00
}
return r, err
2020-01-02 05:39:52 +00:00
}