• Eric Myhre's avatar
    Repose refactored into several packages. · 57832ad7
    Eric Myhre authored
    All of which now explicitly confess their cid-specificness.
    
    Some things in the 'repose' draft were *really* twisted; I'm glad that
    first draft is getting replaced before anything actually used it...
    
    For example, NodeBuilderChooser was just ridiculously misplaced abstraction.
    When doing a traversal, you have the local type information (if any) already
    in hand, and can just... pick an appropriate NodeBuilder already.  Now that
    the NodeBuilder is simply a parameter to Link.Load, everything shakes out
    much, much more clearly as a result.
    
    The cidlink package contains all concrete referns to Cids.  This implements
    the ipld.Link and ipld.LinkBuilder interfaces... but if you don't import
    the cidlink package in your program, you won't find any of the cid packages
    (nor their numerous transitive dependencies) in your dependency set.
    
    Multicodecs are now a registry which is confined in scope to the cidlink
    package.  (It's global, but I think in practice this will be fine: it's a
    plugin system, and there's no good cause for allowing variations in how
    those magic bytes of cids are interpreted.)
    
    There are now dagcbor and dagjson packages for encoding.  These explicitly
    refer to the cidlink package (and register themselves on package init).
    While these refer to cidlink, you could imagine we might also introduce
    other encoding packages which *don't*.
    
    Finally, note that the dagcbor and dagjson packages are in fact still not
    done.  This is the same logic/completeness they had before this diff...
    which does not include actual parsing of cids!  However, it's now clear
    where to introduce that and at what scope.  (It will probably require
    more duplication of unmarshalling code than desirable, but, alas, that
    might simply be the cost of doing business.  Dagjson in particular has
    topologically "interesting" things to handle that I'd be loathe to make
    a sufficiently pluggable unmarshal traversal to support; it would be
    possible, but likely a noticable slowdown to continuously check and
    then promptly disregard the interesting case.)
    
    Some work remains, but this is now pretty close to sanity.
    Signed-off-by: default avatarEric Myhre <hash@exultant.us>
    57832ad7
linking.go 6.9 KB