forked from cerc-io/ipld-eth-server
68 lines
1.7 KiB
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
|
|
}
|