pin verify: use temporary struct
This commit was moved from ipfs/go-ipfs-http-client@e400fa3b380b589c2ae385a66a007d685147e4c7
Łukasz Magiera committed
Feb 19, 2019 at 22:19 UTC
fc299e7e849d46e364204234f9ea3d3aa52e42cc
1 file changed
+36
-21
client/httpapi/pin.go
+36
-21
@@ -90,27 +90,20 @@ func (api *PinAPI) Update(ctx context.Context, from iface.Path, to iface.Path, o
90
}
91
92
type pinVerifyRes struct {
93
- Cid string
94
- JOk bool `json:"Ok"`
95
- JBadNodes []*badNode `json:"BadNodes,omitempty"`
93
+ ok bool
94
+ badNodes []iface.BadPinNode
95
}
96
97
func (r *pinVerifyRes) Ok() bool {
99
- return r.JOk
98
+ return r.ok
99
}
100
101
func (r *pinVerifyRes) BadNodes() []iface.BadPinNode {
103
- out := make([]iface.BadPinNode, len(r.JBadNodes))
104
- for i, n := range r.JBadNodes {
105
- out[i] = n
106
- }
107
- return out
102
+ return r.badNodes
103
}
104
105
type badNode struct {
111
- Cid string
112
- JErr string `json:"Err"`
113
-
106
+ err error
107
cid cid.Cid
108
}
109
@@ -119,10 +112,7 @@ func (n *badNode) Path() iface.ResolvedPath {
112
}
113
114
func (n *badNode) Err() error {
122
- if n.JErr != "" {
123
- return errors.New(n.JErr)
124
- }
125
- return nil
115
+ return n.err
116
}
117
118
func (api *PinAPI) Verify(ctx context.Context) (<-chan iface.PinStatus, error) {
@@ -140,20 +130,45 @@ func (api *PinAPI) Verify(ctx context.Context) (<-chan iface.PinStatus, error) {
130
defer close(res)
131
dec := json.NewDecoder(resp.Output)
132
for {
143
- var out pinVerifyRes
133
+ var out struct {
134
+ Cid string
135
+ Ok bool
136
+
137
+ BadNodes []struct{
138
+ Cid string
139
+ Err string
140
+ }
141
+ }
142
if err := dec.Decode(&out); err != nil {
143
return // todo: handle non io.EOF somehow
144
}
145
148
- for i, n := range out.JBadNodes {
149
- out.JBadNodes[i].cid, err = cid.Decode(n.Cid)
146
+ badNodes := make([]iface.BadPinNode, len(out.BadNodes))
147
+ for i, n := range out.BadNodes {
148
+ c, err := cid.Decode(n.Cid)
149
if err != nil {
151
- return
150
+ badNodes[i] = &badNode{
151
+ cid: c,
152
+ err: err,
153
+ }
154
+ continue
155
+ }
156
+
157
+ if n.Err != "" {
158
+ err = errors.New(n.Err)
159
+ }
160
+ badNodes[i] = &badNode{
161
+ cid: c,
162
+ err: err,
163
}
164
}
165
166
select {
156
- case res <- &out:
167
+ case res <- &pinVerifyRes{
168
+ ok: out.Ok,
169
+
170
+ badNodes: badNodes,
171
+ }:
172
case <-ctx.Done():
173
return
174
}