Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

node/basic: add Chooser #198

Merged
merged 1 commit into from
Jun 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions node/basic/any.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,20 @@ var (
//_ ipld.NodeAssembler = &anyAssembler{}
)

// Note that we don't use a "var _" declaration to assert that Chooser
// implements traversal.LinkTargetNodePrototypeChooser, to keep basicnode's
// dependencies fairly light.

// Chooser implements traversal.LinkTargetNodePrototypeChooser.
//
// It can be used directly when loading links into the "any" prototype,
// or with another chooser layer on top, such as:
//
// prototypeChooser := dagpb.AddSupportToChooser(basicnode.Chooser)
func Chooser(_ ipld.Link, _ ipld.LinkContext) (ipld.NodePrototype, error) {
return Prototype__Any{}, nil
}

// anyNode is a union meant for alloc amortization; see anyAssembler.
// Note that anyBuilder doesn't use anyNode, because it's not aiming to amortize anything.
//
Expand Down
18 changes: 6 additions & 12 deletions traversal/focus_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,8 @@ func TestFocusWithLinkLoading(t *testing.T) {
lsys.StorageReadOpener = (&store).OpenRead
err := traversal.Progress{
Cfg: &traversal.Config{
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: func(_ ipld.Link, _ ipld.LinkContext) (ipld.NodePrototype, error) {
return basicnode.Prototype__Any{}, nil
},
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: basicnode.Chooser,
},
}.Focus(rootNode, ipld.ParsePath("linkedMap/nested/nonlink"), func(prog traversal.Progress, n ipld.Node) error {
Wish(t, n, ShouldEqual, basicnode.NewString("zoo"))
Expand Down Expand Up @@ -168,10 +166,8 @@ func TestGetWithLinkLoading(t *testing.T) {
lsys.StorageReadOpener = (&store).OpenRead
n, err := traversal.Progress{
Cfg: &traversal.Config{
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: func(_ ipld.Link, _ ipld.LinkContext) (ipld.NodePrototype, error) {
return basicnode.Prototype__Any{}, nil
},
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: basicnode.Chooser,
},
}.Get(rootNode, ipld.ParsePath("linkedMap/nested/nonlink"))
Wish(t, err, ShouldEqual, nil)
Expand Down Expand Up @@ -312,10 +308,8 @@ func TestFocusedTransformWithLinks(t *testing.T) {
lsys.StorageReadOpener = (&store).OpenRead
lsys.StorageWriteOpener = (&store2).OpenWrite
cfg := traversal.Config{
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: func(_ ipld.Link, _ ipld.LinkContext) (ipld.NodePrototype, error) {
return basicnode.Prototype.Any, nil
},
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: basicnode.Chooser,
}
t.Run("UpdateMapBeyondLink", func(t *testing.T) {
n, err := traversal.Progress{
Expand Down
18 changes: 6 additions & 12 deletions traversal/walk_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,10 +122,8 @@ func TestWalkMatching(t *testing.T) {
lsys.StorageReadOpener = (&store).OpenRead
err = traversal.Progress{
Cfg: &traversal.Config{
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: func(_ ipld.Link, _ ipld.LinkContext) (ipld.NodePrototype, error) {
return basicnode.Prototype__Any{}, nil
},
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: basicnode.Chooser,
},
}.WalkMatching(middleMapNode, s, func(prog traversal.Progress, n ipld.Node) error {
switch order {
Expand Down Expand Up @@ -168,10 +166,8 @@ func TestWalkMatching(t *testing.T) {
lsys.StorageReadOpener = (&store).OpenRead
err = traversal.Progress{
Cfg: &traversal.Config{
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: func(_ ipld.Link, _ ipld.LinkContext) (ipld.NodePrototype, error) {
return basicnode.Prototype__Any{}, nil
},
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: basicnode.Chooser,
},
}.WalkMatching(middleListNode, s, func(prog traversal.Progress, n ipld.Node) error {
switch order {
Expand Down Expand Up @@ -213,10 +209,8 @@ func TestWalkMatching(t *testing.T) {
lsys.StorageReadOpener = (&store).OpenRead
err = traversal.Progress{
Cfg: &traversal.Config{
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: func(_ ipld.Link, _ ipld.LinkContext) (ipld.NodePrototype, error) {
return basicnode.Prototype__Any{}, nil
},
LinkSystem: lsys,
LinkTargetNodePrototypeChooser: basicnode.Chooser,
},
}.WalkMatching(rootNode, s, func(prog traversal.Progress, n ipld.Node) error {
switch order {
Expand Down