return errors from constructor methods
This commit was moved from ipfs/go-ipfs-http-client@dbee4e27aaf9ef8e3fa7e25ac1f4f28df8a31e0d
Łukasz Magiera committed
Feb 19, 2019 at 21:53 UTC
27aa13fe44561e8d9469ce537e64baa60d17a705
2 files changed
+20
-24
client/httpapi/api.go
+16
-23
@@ -29,8 +29,7 @@ type HttpApi struct {
29
applyGlobal func(*RequestBuilder)
30
}
31
32
-//TODO: Return errors here
33
-func NewLocalApi() iface.CoreAPI {
32
+func NewLocalApi() (iface.CoreAPI, error) {
33
baseDir := os.Getenv(EnvDir)
34
if baseDir == "" {
35
baseDir = DefaultPathRoot
@@ -39,40 +38,34 @@ func NewLocalApi() iface.CoreAPI {
38
return NewPathApi(baseDir)
39
}
40
42
-func NewPathApi(p string) iface.CoreAPI {
43
- a := ApiAddr(p)
44
- if a == nil {
45
- return nil
41
+func NewPathApi(p string) (iface.CoreAPI, error) {
42
+ a, err := ApiAddr(p)
43
+ if err != nil {
44
+ if err == os.ErrNotExist {
45
+ err = nil
46
+ }
47
+ return nil, err
48
}
49
return NewApi(a)
50
}
51
50
-func ApiAddr(ipfspath string) ma.Multiaddr {
52
+func ApiAddr(ipfspath string) (ma.Multiaddr, error) {
53
baseDir, err := homedir.Expand(ipfspath)
54
if err != nil {
53
- return nil
55
+ return nil, err
56
}
57
58
apiFile := path.Join(baseDir, DefaultApiFile)
59
58
- if _, err := os.Stat(apiFile); err != nil {
59
- return nil
60
- }
61
-
60
api, err := ioutil.ReadFile(apiFile)
61
if err != nil {
64
- return nil
65
- }
66
-
67
- maddr, err := ma.NewMultiaddr(strings.TrimSpace(string(api)))
68
- if err != nil {
69
- return nil
62
+ return nil, err
63
}
64
72
- return maddr
65
+ return ma.NewMultiaddr(strings.TrimSpace(string(api)))
66
}
67
75
-func NewApi(a ma.Multiaddr) *HttpApi { // TODO: should be MAddr?
68
+func NewApi(a ma.Multiaddr) (*HttpApi, error) {
69
c := &gohttp.Client{
70
Transport: &gohttp.Transport{
71
Proxy: gohttp.ProxyFromEnvironment,
@@ -83,10 +76,10 @@ func NewApi(a ma.Multiaddr) *HttpApi { // TODO: should be MAddr?
76
return NewApiWithClient(a, c)
77
}
78
86
-func NewApiWithClient(a ma.Multiaddr, c *gohttp.Client) *HttpApi {
79
+func NewApiWithClient(a ma.Multiaddr, c *gohttp.Client) (*HttpApi, error) {
80
_, url, err := manet.DialArgs(a)
81
if err != nil {
89
- return nil // TODO: return that error
82
+ return nil, err
83
}
84
85
if a, err := ma.NewMultiaddr(url); err == nil {
@@ -107,7 +100,7 @@ func NewApiWithClient(a ma.Multiaddr, c *gohttp.Client) *HttpApi {
100
return fmt.Errorf("unexpected redirect")
101
}
102
110
- return api
103
+ return api, nil
104
}
105
106
func (api *HttpApi) WithOptions(opts ...caopts.ApiOption) (iface.CoreAPI, error) {
client/httpapi/api_test.go
+4
-1
@@ -157,7 +157,10 @@ func (NodeProvider) makeAPISwarm(ctx context.Context, fullIdentity bool, n int)
157
DisableCompression: true,
158
},
159
}
160
- apis[i] = NewApiWithClient(maddr, c)
160
+ apis[i], err = NewApiWithClient(maddr, c)
161
+ if err != nil {
162
+ panic(err)
163
+ }
164
165
// empty node is pinned even with --empty-repo, we don't want that
166
emptyNode, err := iface.ParsePath("/ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn")