cosmos-sdk/x/gov/queryable.go

57 lines
1.5 KiB
Go
Raw Normal View History

2018-07-31 18:48:32 -07:00
package gov
import (
sdk "github.com/cosmos/cosmos-sdk/types"
abci "github.com/tendermint/tendermint/abci/types"
)
type Querier struct {
keeper Keeper
}
func NewQuerier(keeper Keeper) {
return Querier{
keeper: keeper,
}
}
func (keeper Keeper) Query(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) {
switch path[0] {
case "tally":
return QueryTally(ctx, path[1:], req)
case "proposal":
return handleMsgSubmitProposal(ctx, keeper, msg)
case MsgVote:
return handleMsgVote(ctx, keeper, msg)
default:
errMsg := "Unrecognized gov msg type"
return sdk.ErrUnknownRequest(errMsg).Result()
}
}
func QueryProposal(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) {
var proposalID int64
err := keeper.cdc.UnmarshalBinary(req.Data, proposalID)
if err != nil {
return []byte{}, sdk.ErrUnknownRequest()
}
proposal := keeper.GetProposal(ctx, proposalID)
if proposal == nil {
return []byte{}, ErrUnknownProposal(DefaultCodespace, proposalID)
}
return keeper.cdc.MustMarshalBinary(proposal), nil
}
func QueryTally(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) {
var proposalID int64
err := keeper.cdc.UnmarshalBinary(req.Data, proposalID)
if err != nil {
return []byte{}, sdk.ErrUnknownRequest()
}
proposal := keeper.GetProposal(ctx, proposalID)
if proposal == nil {
return []byte{}, ErrUnknownProposal(DefaultCodespace, proposalID)
}
passes, _ := tally(ctx, keeper, proposal)
}