| 123 | } |
| 124 | |
| 125 | func stateTreeNode(ctx context.Context, tree *stateTree, p *path.StateTreeNode) (*service.StateTreeNode, error) { |
| 126 | node := tree.root |
| 127 | for i, idx64 := range p.Indices { |
| 128 | var err error |
| 129 | node, err = node.index(ctx, idx64, tree) |
| 130 | switch err := err.(type) { |
| 131 | case nil: |
| 132 | case errIndexOOB: |
| 133 | at := &path.StateTreeNode{Tree: p.Tree, Indices: p.Indices[:i+1]} |
| 134 | return nil, errPathOOB(err.idx, "Index", 0, err.count-1, at) |
| 135 | default: |
| 136 | return nil, err |
| 137 | } |
| 138 | } |
| 139 | return node.service(ctx, tree), nil |
| 140 | } |
| 141 | |
| 142 | func stateTreeNodePath(ctx context.Context, tree *stateTree, p path.Node) ([]uint64, error) { |
| 143 | n := tree.root |