Move selector.PathSegment up to ipld.PathSegment.
ipld.Path is now a slice of ipld.PathSegment instead of strings.
This should be an improvement in sanity: there are now several fewer
places importing "strconv", and that's just always a good thing.
We will also be free in the future to add PathSegment-based accessor
methods to ipld.Node, as has already been commented as a desire;
and, to use PathSegment in building better typed errors
(which is the specific thing that provokes this diff today and now).
The implementation of PathSegment is now also based on a struct-style
union rather than an interface style union. There are comments about
this in the diff. I do not wish to comment on how much time I've spent
looking at golang assembler and runtime internals while trying to find
a path to a more perfect compromise between ergonomics and performance.
tl;dr Selectors will probably get faster and trigger fewer allocations;
ipld.Path will probably take slightly more memory (another word per
path segment), but not enough to care about for any practical purposes.
I did not attempt to hoist the SegmentIterator features from the
selector package to anywhere more central.
It may be a fine idea to do so someday; I just don't presently have
a formed opinion and am not budgeting time to consider it today.
Signed-off-by: Eric Myhre <hash@exultant.us>
Showing
pathSegment.go
0 → 100644
Please register or sign in to comment