object put: Fixed putting objects with JSON encoding
Matt Bell committed
Nov 14, 2014 at 00:11 UTC
b4de6cce9a2b048972ae6ca084b40d78dbfdb816
1 file changed
+33
-18
core/commands2/object.go
+33
-18
@@ -163,23 +163,10 @@ This command outputs data in the following encodings:
163
Marshalers: cmds.MarshalerMap{
164
cmds.EncodingType("protobuf"): func(res cmds.Response) ([]byte, error) {
165
node := res.Output().(*Node)
166
-
167
- // convert the Node object into a real dag.Node
168
- object := new(dag.Node)
169
- object.Data = node.Data
170
- object.Links = make([]*dag.Link, len(node.Links))
171
- for i, link := range node.Links {
172
- hash, err := mh.FromB58String(link.Hash)
173
- if err != nil {
174
- return nil, err
175
- }
176
- object.Links[i] = &dag.Link{
177
- Name: link.Name,
178
- Size: link.Size,
179
- Hash: hash,
180
- }
166
+ object, err := deserializeNode(node)
167
+ if err != nil {
168
+ return nil, err
169
}
182
-
170
return object.Marshal()
171
},
172
},
@@ -292,8 +279,16 @@ func objectPut(n *core.IpfsNode, input io.Reader, encoding string) (*Object, err
279
280
switch getObjectEnc(encoding) {
281
case objectEncodingJSON:
295
- dagnode = new(dag.Node)
296
- err = json.Unmarshal(data, dagnode)
282
+ node := new(Node)
283
+ err = json.Unmarshal(data, node)
284
+ if err != nil {
285
+ return nil, err
286
+ }
287
+
288
+ dagnode, err = deserializeNode(node)
289
+ if err != nil {
290
+ return nil, err
291
+ }
292
293
case objectEncodingProtobuf:
294
dagnode, err = dag.Decoded(data)
@@ -356,3 +351,23 @@ func getOutput(dagnode *dag.Node) (*Object, error) {
351
352
return output, nil
353
}
354
+
355
+// converts the Node object into a real dag.Node
356
+func deserializeNode(node *Node) (*dag.Node, error) {
357
+ dagnode := new(dag.Node)
358
+ dagnode.Data = node.Data
359
+ dagnode.Links = make([]*dag.Link, len(node.Links))
360
+ for i, link := range node.Links {
361
+ hash, err := mh.FromB58String(link.Hash)
362
+ if err != nil {
363
+ return nil, err
364
+ }
365
+ dagnode.Links[i] = &dag.Link{
366
+ Name: link.Name,
367
+ Size: link.Size,
368
+ Hash: hash,
369
+ }
370
+ }
371
+
372
+ return dagnode, nil
373
+}