@cryptotaxi247 / kubo / commits / fc299e7e8

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 }