Skip to content

Commit

Permalink
Add enumerate methods to the multicodec registries.
Browse files Browse the repository at this point in the history
(This is a logical port of
#169 to follow
#172 .)

I've added more documentation -- particularly, cautionary notes on the
package-scope functions which read the global shared state.
  • Loading branch information
willscott authored and warpfork committed May 24, 2021
1 parent 575054d commit 401e218
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
32 changes: 32 additions & 0 deletions multicodec/defaultRegistry.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,22 @@ func LookupEncoder(indicator uint64) (ipld.Encoder, error) {
return DefaultRegistry.LookupEncoder(indicator)
}

// ListEncoders returns a list of multicodec indicators for which an ipld.Encoder is registered.
// The list is in no particular order.
// It is a shortcut to the ListEncoders method on the global DefaultRegistry.
//
// Be judicious about trying to use this function outside of debugging.
// Because the global default registry is global and easily modified,
// and can be changed by any of the transitive dependencies of your program,
// its contents are not particularly stable.
// In particular, it is not recommended to make any behaviors of your program conditional
// based on information returned by this function -- if your program needs conditional
// behavior based on registred codecs, you may want to consider taking more explicit control
// and using your own non-default registry.
func ListEncoders() []uint64 {
return DefaultRegistry.ListEncoders()
}

// RegisterDecoder updates the global DefaultRegistry a map a multicodec indicator number to the given ipld.Decoder function.
// The decoder functions registered can be subsequently looked up using LookupDecoder.
// It is a shortcut to the RegisterDecoder method on the global DefaultRegistry.
Expand Down Expand Up @@ -83,3 +99,19 @@ func RegisterDecoder(indicator uint64, decodeFunc ipld.Decoder) {
func LookupDecoder(indicator uint64) (ipld.Decoder, error) {
return DefaultRegistry.LookupDecoder(indicator)
}

// ListDecoders returns a list of multicodec indicators for which an ipld.Decoder is registered.
// The list is in no particular order.
// It is a shortcut to the ListDecoders method on the global DefaultRegistry.
//
// Be judicious about trying to use this function outside of debugging.
// Because the global default registry is global and easily modified,
// and can be changed by any of the transitive dependencies of your program,
// its contents are not particularly stable.
// In particular, it is not recommended to make any behaviors of your program conditional
// based on information returned by this function -- if your program needs conditional
// behavior based on registred codecs, you may want to consider taking more explicit control
// and using your own non-default registry.
func ListDecoders() []uint64 {
return DefaultRegistry.ListDecoders()
}
20 changes: 20 additions & 0 deletions multicodec/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,16 @@ func (r *Registry) LookupEncoder(indicator uint64) (ipld.Encoder, error) {
return encodeFunc, nil
}

// ListEncoders returns a list of multicodec indicators for which an ipld.Encoder is registered.
// The list is in no particular order.
func (r *Registry) ListEncoders() []uint64 {
encoders := make([]uint64, 0, len(r.encoders))
for e := range r.encoders {
encoders = append(encoders, e)
}
return encoders
}

// RegisterDecoder updates a simple map of multicodec indicator number to ipld.Decoder function.
// The decoder functions registered can be subsequently looked up using LookupDecoder.
func (r *Registry) RegisterDecoder(indicator uint64, decodeFunc ipld.Decoder) {
Expand All @@ -81,3 +91,13 @@ func (r *Registry) LookupDecoder(indicator uint64) (ipld.Decoder, error) {
}
return decodeFunc, nil
}

// ListDecoders returns a list of multicodec indicators for which an ipld.Decoder is registered.
// The list is in no particular order.
func (r *Registry) ListDecoders() []uint64 {
decoders := make([]uint64, 0, len(r.decoders))
for d := range r.decoders {
decoders = append(decoders, d)
}
return decoders
}

0 comments on commit 401e218

Please sign in to comment.