// unmarshalNode returns a Record instance from its byte representation. func unmarshalNode(buf []byte) (*dag.Node, error) { nd, err := dag.Decoded(buf) if err != nil { return nil, err } if err := NodeHasRequiredLinks(nd, requiredLinks); err != nil { return nil, err } // ok looks good. return nd, nil }
// objectPut takes a format option, serializes bytes from stdin and updates the dag with that data func objectPut(n *core.IpfsNode, input io.Reader, encoding string) (*Object, error) { data, err := ioutil.ReadAll(io.LimitReader(input, inputLimit+10)) if err != nil { return nil, err } if len(data) >= inputLimit { return nil, ErrObjectTooLarge } var dagnode *dag.Node switch getObjectEnc(encoding) { case objectEncodingJSON: node := new(Node) err = json.Unmarshal(data, node) if err != nil { return nil, err } // check that we have data in the Node to add // otherwise we will add the empty object without raising an error if node.Data == "" && len(node.Links) == 0 { return nil, ErrEmptyNode } dagnode, err = deserializeNode(node) if err != nil { return nil, err } case objectEncodingProtobuf: dagnode, err = dag.Decoded(data) default: return nil, ErrUnknownObjectEnc } if err != nil { return nil, err } _, err = n.DAG.Add(dagnode) if err != nil { return nil, err } return getOutput(dagnode) }