Skip to content

Commit

Permalink
registry: Reset storages when creating registries
Browse files Browse the repository at this point in the history
  • Loading branch information
cdamian committed Jul 25, 2023
1 parent e958962 commit 1de5788
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions registry/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,25 +41,31 @@ type FieldOverride struct {
type factory struct {
fieldStorage map[int64]FieldDecoder
recursiveFieldStorage map[int64]*RecursiveDecoder
fieldOverrides []FieldOverride
}

// NewFactory creates a new Factory using the provided overrides, if any.
func NewFactory(fieldOverrides ...FieldOverride) Factory {
f := &factory{}
f.fieldOverrides = fieldOverrides

return f
}

func (f *factory) resetStorages() {
f.fieldStorage = make(map[int64]FieldDecoder)
f.recursiveFieldStorage = make(map[int64]*RecursiveDecoder)

for _, fieldOverride := range fieldOverrides {
for _, fieldOverride := range f.fieldOverrides {
f.fieldStorage[fieldOverride.FieldLookupIndex] = fieldOverride.FieldDecoder
}

return f
}

// CreateErrorRegistry creates the registry that contains the types for errors.
// nolint:dupl
func (f *factory) CreateErrorRegistry(meta *types.Metadata) (ErrorRegistry, error) {
f.resetStorages()

errorRegistry := make(map[ErrorID]*TypeDecoder)

for _, mod := range meta.AsMetadataV14.Pallets {
Expand Down Expand Up @@ -108,6 +114,8 @@ func (f *factory) CreateErrorRegistry(meta *types.Metadata) (ErrorRegistry, erro
// CreateCallRegistry creates the registry that contains the types for calls.
// nolint:dupl
func (f *factory) CreateCallRegistry(meta *types.Metadata) (CallRegistry, error) {
f.resetStorages()

callRegistry := make(map[types.CallIndex]*TypeDecoder)

for _, mod := range meta.AsMetadataV14.Pallets {
Expand Down Expand Up @@ -155,6 +163,8 @@ func (f *factory) CreateCallRegistry(meta *types.Metadata) (CallRegistry, error)

// CreateEventRegistry creates the registry that contains the types for events.
func (f *factory) CreateEventRegistry(meta *types.Metadata) (EventRegistry, error) {
f.resetStorages()

eventRegistry := make(map[types.EventID]*TypeDecoder)

for _, mod := range meta.AsMetadataV14.Pallets {
Expand Down

0 comments on commit 1de5788

Please sign in to comment.