Skip to content
This repository was archived by the owner on Oct 5, 2023. It is now read-only.

Commit 555a5b3

Browse files
authored
Merge pull request #18 from ipfs/feat/iface-reqbuilder
Use interface for RequestBuilder
2 parents b9c8a2f + 0534b7c commit 555a5b3

File tree

3 files changed

+31
-17
lines changed

3 files changed

+31
-17
lines changed

api.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ type HttpApi struct {
3636
url string
3737
httpcli gohttp.Client
3838
Headers http.Header
39-
applyGlobal func(*RequestBuilder)
39+
applyGlobal func(*requestBuilder)
4040
}
4141

4242
// NewLocalApi tries to construct new HttpApi instance communicating with local
@@ -117,7 +117,7 @@ func NewURLApiWithClient(url string, c *gohttp.Client) (*HttpApi, error) {
117117
url: url,
118118
httpcli: *c,
119119
Headers: make(map[string][]string),
120-
applyGlobal: func(*RequestBuilder) {},
120+
applyGlobal: func(*requestBuilder) {},
121121
}
122122

123123
// We don't support redirects.
@@ -134,7 +134,7 @@ func (api *HttpApi) WithOptions(opts ...caopts.ApiOption) (iface.CoreAPI, error)
134134
}
135135

136136
subApi := *api
137-
subApi.applyGlobal = func(req *RequestBuilder) {
137+
subApi.applyGlobal = func(req *requestBuilder) {
138138
if options.Offline {
139139
req.Option("offline", options.Offline)
140140
}
@@ -143,14 +143,14 @@ func (api *HttpApi) WithOptions(opts ...caopts.ApiOption) (iface.CoreAPI, error)
143143
return &subApi, nil
144144
}
145145

146-
func (api *HttpApi) Request(command string, args ...string) *RequestBuilder {
146+
func (api *HttpApi) Request(command string, args ...string) RequestBuilder {
147147
headers := make(map[string]string)
148148
if api.Headers != nil {
149149
for k := range api.Headers {
150150
headers[k] = api.Headers.Get(k)
151151
}
152152
}
153-
return &RequestBuilder{
153+
return &requestBuilder{
154154
command: command,
155155
args: args,
156156
shell: api,

requestbuilder.go

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,20 @@ import (
1212
"github.com/ipfs/go-ipfs-files"
1313
)
1414

15-
// RequestBuilder is an IPFS commands request builder.
16-
type RequestBuilder struct {
15+
type RequestBuilder interface {
16+
Arguments(args ...string) RequestBuilder
17+
BodyString(body string) RequestBuilder
18+
BodyBytes(body []byte) RequestBuilder
19+
Body(body io.Reader) RequestBuilder
20+
FileBody(body io.Reader) RequestBuilder
21+
Option(key string, value interface{}) RequestBuilder
22+
Header(name, value string) RequestBuilder
23+
Send(ctx context.Context) (*Response, error)
24+
Exec(ctx context.Context, res interface{}) error
25+
}
26+
27+
// requestBuilder is an IPFS commands request builder.
28+
type requestBuilder struct {
1729
command string
1830
args []string
1931
opts map[string]string
@@ -24,29 +36,29 @@ type RequestBuilder struct {
2436
}
2537

2638
// Arguments adds the arguments to the args.
27-
func (r *RequestBuilder) Arguments(args ...string) *RequestBuilder {
39+
func (r *requestBuilder) Arguments(args ...string) RequestBuilder {
2840
r.args = append(r.args, args...)
2941
return r
3042
}
3143

3244
// BodyString sets the request body to the given string.
33-
func (r *RequestBuilder) BodyString(body string) *RequestBuilder {
45+
func (r *requestBuilder) BodyString(body string) RequestBuilder {
3446
return r.Body(strings.NewReader(body))
3547
}
3648

3749
// BodyBytes sets the request body to the given buffer.
38-
func (r *RequestBuilder) BodyBytes(body []byte) *RequestBuilder {
50+
func (r *requestBuilder) BodyBytes(body []byte) RequestBuilder {
3951
return r.Body(bytes.NewReader(body))
4052
}
4153

4254
// Body sets the request body to the given reader.
43-
func (r *RequestBuilder) Body(body io.Reader) *RequestBuilder {
55+
func (r *requestBuilder) Body(body io.Reader) RequestBuilder {
4456
r.body = body
4557
return r
4658
}
4759

4860
// FileBody sets the request body to the given reader wrapped into multipartreader.
49-
func (r *RequestBuilder) FileBody(body io.Reader) *RequestBuilder {
61+
func (r *requestBuilder) FileBody(body io.Reader) RequestBuilder {
5062
pr, _ := files.NewReaderPathFile("/dev/stdin", ioutil.NopCloser(body), nil)
5163
d := files.NewMapDirectory(map[string]files.Node{"": pr})
5264
r.body = files.NewMultiFileReader(d, false)
@@ -55,7 +67,7 @@ func (r *RequestBuilder) FileBody(body io.Reader) *RequestBuilder {
5567
}
5668

5769
// Option sets the given option.
58-
func (r *RequestBuilder) Option(key string, value interface{}) *RequestBuilder {
70+
func (r *requestBuilder) Option(key string, value interface{}) RequestBuilder {
5971
var s string
6072
switch v := value.(type) {
6173
case bool:
@@ -76,7 +88,7 @@ func (r *RequestBuilder) Option(key string, value interface{}) *RequestBuilder {
7688
}
7789

7890
// Header sets the given header.
79-
func (r *RequestBuilder) Header(name, value string) *RequestBuilder {
91+
func (r *requestBuilder) Header(name, value string) RequestBuilder {
8092
if r.headers == nil {
8193
r.headers = make(map[string]string, 1)
8294
}
@@ -85,7 +97,7 @@ func (r *RequestBuilder) Header(name, value string) *RequestBuilder {
8597
}
8698

8799
// Send sends the request and return the response.
88-
func (r *RequestBuilder) Send(ctx context.Context) (*Response, error) {
100+
func (r *requestBuilder) Send(ctx context.Context) (*Response, error) {
89101
r.shell.applyGlobal(r)
90102

91103
req := NewRequest(ctx, r.shell.url, r.command, r.args...)
@@ -96,7 +108,7 @@ func (r *RequestBuilder) Send(ctx context.Context) (*Response, error) {
96108
}
97109

98110
// Exec sends the request a request and decodes the response.
99-
func (r *RequestBuilder) Exec(ctx context.Context, res interface{}) error {
111+
func (r *requestBuilder) Exec(ctx context.Context, res interface{}) error {
100112
httpRes, err := r.Send(ctx)
101113
if err != nil {
102114
return err
@@ -112,3 +124,5 @@ func (r *RequestBuilder) Exec(ctx context.Context, res interface{}) error {
112124

113125
return httpRes.decode(res)
114126
}
127+
128+
var _ RequestBuilder = &requestBuilder{}

response.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func (r *Request) Send(c *http.Client) (*Response, error) {
9797

9898
req = req.WithContext(r.Ctx)
9999

100-
// Add any headers that were supplied via the RequestBuilder.
100+
// Add any headers that were supplied via the requestBuilder.
101101
for k, v := range r.Headers {
102102
req.Header.Add(k, v)
103103
}

0 commit comments

Comments
 (0)