mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-11-17 20:32:48 +00:00
37 lines
671 B
Go
37 lines
671 B
Go
|
package httputil
|
||
|
|
||
|
import "net/http"
|
||
|
|
||
|
type TransportWrapper struct {
|
||
|
http.RoundTripper
|
||
|
|
||
|
Pre func(*http.Request) error
|
||
|
Post func(*http.Response) error
|
||
|
}
|
||
|
|
||
|
func NewTransportWrapper() *TransportWrapper {
|
||
|
return &TransportWrapper{
|
||
|
RoundTripper: http.DefaultTransport,
|
||
|
|
||
|
Pre: func(*http.Request) error { return nil },
|
||
|
Post: func(*http.Response) error { return nil },
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *TransportWrapper) RoundTrip(req *http.Request) (*http.Response, error) {
|
||
|
if err := c.Pre(req); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
r, err := c.RoundTripper.RoundTrip(req)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if err := c.Post(r); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return r, nil
|
||
|
}
|