-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathrequest.go
67 lines (52 loc) · 1.63 KB
/
request.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package trakt
import (
"github.com/jingweno/go-sawyer"
"github.com/jingweno/go-sawyer/mediatype"
)
func newRequest(client *Client, urlStr string) (req *Request, err error) {
sawyerReq, err := client.Client.NewRequest(urlStr)
if err != nil {
return
}
req = &Request{client: client, Request: sawyerReq}
return
}
type Request struct {
*sawyer.Request
client *Client
}
func (r *Request) Head(output interface{}) (*Response, error) {
return r.createResponse(r.Request.Head(), output)
}
func (r *Request) Get(output interface{}) (*Response, error) {
return r.createResponse(r.Request.Get(), output)
}
func (r *Request) Post(input interface{}, output interface{}) (*Response, error) {
r.setBody(input)
return r.createResponse(r.Request.Post(), output)
}
func (r *Request) Put(input interface{}, output interface{}) (*Response, error) {
r.setBody(input)
return r.createResponse(r.Request.Put(), output)
}
func (r *Request) Delete(output interface{}) (*Response, error) {
return r.createResponse(r.Request.Delete(), output)
}
func (r *Request) Patch(input interface{}, output interface{}) (*Response, error) {
r.setBody(input)
return r.createResponse(r.Request.Patch(), output)
}
func (r *Request) Options(output interface{}) (*Response, error) {
return r.createResponse(r.Request.Options(), output)
}
func (r *Request) setBody(input interface{}) {
mtype, _ := mediatype.Parse(DefaultMediaType)
r.Request.SetBody(mtype, input)
}
func (r *Request) createResponse(sawyerResp *sawyer.Response, output interface{}) (resp *Response, err error) {
resp, err = NewResponse(sawyerResp)
if err == nil {
err = sawyerResp.Decode(output)
}
return
}