github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/unixfs/io/dirbuilder.go (about)

     1  package io
     2  
     3  import (
     4  	"github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
     5  
     6  	key "github.com/ipfs/go-ipfs/blocks/key"
     7  	mdag "github.com/ipfs/go-ipfs/merkledag"
     8  	format "github.com/ipfs/go-ipfs/unixfs"
     9  )
    10  
    11  type directoryBuilder struct {
    12  	dserv   mdag.DAGService
    13  	dirnode *mdag.Node
    14  }
    15  
    16  // NewEmptyDirectory returns an empty merkledag Node with a folder Data chunk
    17  func NewEmptyDirectory() *mdag.Node {
    18  	return &mdag.Node{Data: format.FolderPBData()}
    19  }
    20  
    21  // NewDirectory returns a directoryBuilder. It needs a DAGService to add the Children
    22  func NewDirectory(dserv mdag.DAGService) *directoryBuilder {
    23  	db := new(directoryBuilder)
    24  	db.dserv = dserv
    25  	db.dirnode = NewEmptyDirectory()
    26  	return db
    27  }
    28  
    29  // AddChild adds a (name, key)-pair to the root node.
    30  func (d *directoryBuilder) AddChild(ctx context.Context, name string, k key.Key) error {
    31  	cnode, err := d.dserv.Get(ctx, k)
    32  	if err != nil {
    33  		return err
    34  	}
    35  
    36  	return d.dirnode.AddNodeLinkClean(name, cnode)
    37  }
    38  
    39  // GetNode returns the root of this directoryBuilder
    40  func (d *directoryBuilder) GetNode() *mdag.Node {
    41  	return d.dirnode
    42  }