This is a radical rethink of the linking situation for the go-ipld libraries.
- It gets almost all logic detached from the Link/LinkPrototype implementations. This will probably detangle implementations greatly.
- There's a LinkSystem type that handles the composition of different codecs, hashers, etc.
- It's now possible to do your own codec and hasher registries by creating your own LinkSystem instance. Previously this was impossible.
- We can attach many more helper methods to LinkSystem. This should improve end-user usability. Previously there was no clear place to put them (without burdening the Link/LinkBuilder implementations with lots of boilerplate, which was nonelegant in many ways).
There are a couple of groups of interfaces below which would come from different places:
Link
andLinkPrototype
would be implemented by something like CIDs. (A project probably won't actually have a variety of implementations of these, one should be enough; but they're still interfaces for library agility