ipld-eth-server/vendor/github.com/ipfs/go-ipld-format/merkledag.go

68 lines
1.7 KiB
Go

package format
import (
"context"
"fmt"
cid "github.com/ipfs/go-cid"
)
var ErrNotFound = fmt.Errorf("merkledag: not found")
// Either a node or an error.
type NodeOption struct {
Node Node
Err error
}
// The basic Node resolution service.
type NodeGetter interface {
// Get retrieves nodes by CID. Depending on the NodeGetter
// implementation, this may involve fetching the Node from a remote
// machine; consider setting a deadline in the context.
Get(context.Context, cid.Cid) (Node, error)
// GetMany returns a channel of NodeOptions given a set of CIDs.
GetMany(context.Context, []cid.Cid) <-chan *NodeOption
}
// NodeAdder adds nodes to a DAG.
type NodeAdder interface {
// Add adds a node to this DAG.
Add(context.Context, Node) error
// AddMany adds many nodes to this DAG.
//
// Consider using the Batch NodeAdder (`NewBatch`) if you make
// extensive use of this function.
AddMany(context.Context, []Node) error
}
// NodeGetters can optionally implement this interface to make finding linked
// objects faster.
type LinkGetter interface {
NodeGetter
// TODO(ipfs/go-ipld-format#9): This should return []cid.Cid
// GetLinks returns the children of the node refered to by the given
// CID.
GetLinks(ctx context.Context, nd cid.Cid) ([]*Link, error)
}
// DAGService is an IPFS Merkle DAG service.
type DAGService interface {
NodeGetter
NodeAdder
// Remove removes a node from this DAG.
//
// Remove returns no error if the requested node is not present in this DAG.
Remove(context.Context, cid.Cid) error
// RemoveMany removes many nodes from this DAG.
//
// It returns success even if the nodes were not present in the DAG.
RemoveMany(context.Context, []cid.Cid) error
}