space-pussy/x/rank/wasm/interface.go

package wasm

import (
	"encoding/json"
	"github.com/ipfs/go-cid"

	sdk "github.com/cosmos/cosmos-sdk/types"
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"

	wasmvmtypes "github.com/CosmWasm/wasmvm/types"
	graphtypes "github.com/joinresistance/space-pussy/x/graph/types"

	"github.com/joinresistance/space-pussy/x/rank/keeper"
)

type WasmQuerierInterface interface {
	Query(ctx sdk.Context, request wasmvmtypes.QueryRequest) ([]byte, error)
	QueryCustom(ctx sdk.Context, data json.RawMessage) ([]byte, error)
}

var _ WasmQuerierInterface = WasmQuerier{}

type WasmQuerier struct {
	keeper *keeper.StateKeeper
}

func NewWasmQuerier(keeper *keeper.StateKeeper) WasmQuerier {
	return WasmQuerier{keeper}
}

func (WasmQuerier) Query(_ sdk.Context, _ wasmvmtypes.QueryRequest) ([]byte, error) { return nil, nil }

type CosmosQuery struct {
	ParticleRank *QueryParticleRankParams `json:"particle_rank,omitempty"`
}

type QueryParticleRankParams struct {
	Particle string `json:"particle"`
}

type ParticleRankResponse struct {
	Rank uint64 `json:"rank"`
}

func (querier WasmQuerier) QueryCustom(ctx sdk.Context, data json.RawMessage) ([]byte, error) {
	var query CosmosQuery
	err := json.Unmarshal(data, &query)

	if err != nil {
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
	}

	var bz []byte

	if query.ParticleRank != nil {
		particle, err := cid.Decode(query.ParticleRank.Particle)
		if err != nil {
			return nil, graphtypes.ErrInvalidParticle
		}

		if particle.Version() != 0 {
			return nil, graphtypes.ErrCidVersion
		}

		rank, err := querier.keeper.GetRankValueByParticle(ctx, query.ParticleRank.Particle)
		if err != nil {
			return nil, err
		}

		bz, err = json.Marshal(ParticleRankResponse{Rank: rank})
		if err != nil {
			return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
		}

		return bz, err
	}

	return nil, wasmvmtypes.UnsupportedRequest{Kind: "unknown Rank variant"}
}

Synonyms

go-cyber/x/rank/wasm/interface.go
space-pussy/x/dmn/wasm/interface.go
space-pussy/x/grid/wasm/interface.go
space-pussy/x/bandwidth/wasm/interface.go
space-pussy/x/resources/wasm/interface.go
space-pussy/x/graph/wasm/interface.go
go-cyber/x/dmn/wasm/interface.go
go-cyber/x/graph/wasm/interface.go
go-cyber/x/resources/wasm/interface.go
go-cyber/x/bandwidth/wasm/interface.go
go-cyber/x/grid/wasm/interface.go

Neighbours