Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add enumerate methods to the multicodec registries. #176

Merged
merged 1 commit into from
May 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
}