Update traversal package to new linking system.
@@ -3,33 +3,9 @@ package traversal
import (
"context"
- cid "github.com/ipfs/go-cid"
ipld "github.com/ipld/go-ipld-prime"
)
-// An example use of LinkContext in LinkLoader logic might be inspecting the
-// LinkNode, and if it's using the type system, inspecting its Type property;
-// then deciding on whether or not we want to load objects of that Type.
-// This might be used to do a traversal which looks at all directory objects,
-// but not file contents, for example.
-type LinkContext struct {
- LinkPath ipld.Path
- LinkNode ipld.Node // has the cid again, but also might have type info // always zero for writing new nodes, for obvi reasons.
- ParentNode ipld.Node
-}
-
-type LinkLoader func(context.Context, cid.Cid, LinkContext) (ipld.Node, error)
-
-// One presumes implementations will also *save* the content somewhere.
-// The LinkContext parameter is a nod to this -- none of those parameters
-// are relevant to the generation of the Cid itself, but perhaps one might
-// want to use them when deciding where to store some files, etc.
-type LinkBuilder func(
- ctx context.Context,
- node ipld.Node, lnkCtx LinkContext,
- multicodecType uint64, multihashType uint64, multihashLength int,
-) (cid.Cid, error)
-
// VisitFn is a read-only visitor.
type VisitFn func(TraversalProgress, ipld.Node) error
@@ -45,14 +21,14 @@ type TraversalReason byte // enum = SelectionMatch | SelectionParent | Selection
type TraversalProgress struct {
*TraversalConfig
Path ipld.Path // Path is how we reached the current point in the traversal.
- LastBlock struct { // LastBlock stores the Path and CID of the last block edge we had to load. (It will always be zero in traversals with no linkloader.)
+ LastBlock struct { // LastBlock stores the Path and Link of the last block edge we had to load. (It will always be zero in traversals with no linkloader.)
ipld.Path
- cid.Cid
+ ipld.Link
}
}
type TraversalConfig struct {
Ctx context.Context // Context carried through a traversal. Optional; use it if you need cancellation.
- LinkLoader LinkLoader
- // `blockWriter func(Context, Node, multicodec(?)) (CID, error)` probably belongs here.
+ LinkLoader ipld.Loader // Loader used for automatic link traversal.
+ LinkStorer ipld.Storer // Storer used if any mutation features (e.g. traversal.Transform) are used.
}
