github.com/KiraCore/sekai@v0.3.43/x/gov/keeper/data_registry.go (about) 1 package keeper 2 3 import ( 4 "strings" 5 6 "github.com/KiraCore/sekai/x/gov/types" 7 "github.com/cosmos/cosmos-sdk/store/prefix" 8 sdk "github.com/cosmos/cosmos-sdk/types" 9 ) 10 11 // UpsertDataRegistryEntry insert/updates a data registry entry. 12 func (k Keeper) UpsertDataRegistryEntry(ctx sdk.Context, key string, entry types.DataRegistryEntry) { 13 prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), DataRegistryPrefix) 14 15 bz := k.cdc.MustMarshal(&entry) 16 prefixStore.Set([]byte(key), bz) 17 } 18 19 // GetDataRegistryEntry returns the Entry of the registry by key. 20 func (k Keeper) GetDataRegistryEntry(ctx sdk.Context, key string) (types.DataRegistryEntry, bool) { 21 prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), DataRegistryPrefix) 22 23 bz := prefixStore.Get([]byte(key)) 24 if bz == nil { 25 return types.DataRegistryEntry{}, false 26 } 27 28 var na types.DataRegistryEntry 29 k.cdc.MustUnmarshal(bz, &na) 30 31 return na, true 32 } 33 34 // ListDataRegistryEntryKeys returns all keys of data registry 35 func (k Keeper) ListDataRegistryEntryKeys(ctx sdk.Context) []string { 36 var keys []string 37 38 // get iterator for token aliases 39 store := ctx.KVStore(k.storeKey) 40 iterator := sdk.KVStorePrefixIterator(store, DataRegistryPrefix) 41 defer iterator.Close() 42 43 for ; iterator.Valid(); iterator.Next() { 44 key := strings.TrimPrefix(string(iterator.Key()), string(DataRegistryPrefix)) 45 keys = append(keys, key) 46 } 47 48 return keys 49 } 50 51 // AllDataRegistry returns all of data registry 52 func (k Keeper) AllDataRegistry(ctx sdk.Context) map[string]*types.DataRegistryEntry { 53 var dataRegistry map[string]*types.DataRegistryEntry 54 55 keys := k.ListDataRegistryEntryKeys(ctx) 56 57 // get iterator for token aliases 58 store := ctx.KVStore(k.storeKey) 59 iterator := sdk.KVStorePrefixIterator(store, DataRegistryPrefix) 60 defer iterator.Close() 61 62 for _, key := range keys { 63 entry, ok := k.GetDataRegistryEntry(ctx, key) 64 if ok { 65 dataRegistry[key] = &entry 66 } else { 67 dataRegistry[key] = nil 68 } 69 } 70 71 return dataRegistry 72 }