/
request.go
74 lines (62 loc) · 1.84 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
68
69
70
71
72
73
74
package octokit
import (
"github.com/lostisland/go-sawyer"
"github.com/lostisland/go-sawyer/mediatype"
)
type Request struct {
sawyerReq *sawyer.Request
}
func (r *Request) Head(output interface{}) (resp *Response, err error) {
resp, err = r.do("HEAD", nil, output)
return
}
func (r *Request) Get(output interface{}) (resp *Response, err error) {
resp, err = r.do("GET", nil, output)
return
}
func (r *Request) Post(input interface{}, output interface{}) (resp *Response, err error) {
resp, err = r.do("POST", input, output)
return
}
func (r *Request) Put(input interface{}, output interface{}) (resp *Response, err error) {
resp, err = r.do("PUT", input, output)
return
}
func (r *Request) Delete(output interface{}) (resp *Response, err error) {
resp, err = r.do("DELETE", nil, output)
return
}
func (r *Request) do(method string, input interface{}, output interface{}) (resp *Response, err error) {
var sawyerResp *sawyer.Response
switch method {
case sawyer.HeadMethod:
sawyerResp = r.sawyerReq.Head()
case sawyer.GetMethod:
sawyerResp = r.sawyerReq.Get()
case sawyer.PostMethod:
mtype, _ := mediatype.Parse(defaultMediaType)
r.sawyerReq.SetBody(mtype, input)
sawyerResp = r.sawyerReq.Post()
case sawyer.PutMethod:
mtype, _ := mediatype.Parse(defaultMediaType)
r.sawyerReq.SetBody(mtype, input)
sawyerResp = r.sawyerReq.Put()
case sawyer.PatchMethod:
sawyerResp = r.sawyerReq.Patch()
case sawyer.DeleteMethod:
sawyerResp = r.sawyerReq.Delete()
case sawyer.OptionsMethod:
sawyerResp = r.sawyerReq.Options()
}
if sawyerResp.IsError() {
err = sawyerResp.ResponseError
return
}
if sawyerResp.IsApiError() {
err = NewResponseError(sawyerResp)
return
}
resp = &Response{Response: sawyerResp.Response, MediaType: sawyerResp.MediaType, MediaHeader: sawyerResp.MediaHeader}
err = sawyerResp.Decode(output)
return
}