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  }