cosmos-sdk/x/ibc/keeper/querier.go
colin axner b9b578d6de
x/ibc: querying support for unordered channels (#6294)
* pause

* add querying for packet commitments and unrelayed acks

* add get all packet commitments test

* add query channels test

* add query connection channels test

* add test for query packet commitments

* fix key path and add unrelayed acks test

* fix part of lint

* add unrelayed packetsends func

* fix godoc

* add nolint directive

* fix lint

Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
2020-06-06 19:25:45 -04:00

62 lines
2.2 KiB
Go

package keeper
import (
abci "github.com/tendermint/tendermint/abci/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
client "github.com/cosmos/cosmos-sdk/x/ibc/02-client"
connection "github.com/cosmos/cosmos-sdk/x/ibc/03-connection"
channel "github.com/cosmos/cosmos-sdk/x/ibc/04-channel"
)
// NewQuerier creates a querier for the IBC module
func NewQuerier(k Keeper) sdk.Querier {
return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) {
var (
res []byte
err error
)
switch path[0] {
case client.SubModuleName:
switch path[1] {
case client.QueryAllClients:
res, err = client.QuerierClients(ctx, req, k.ClientKeeper)
default:
err = sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown IBC %s query endpoint", client.SubModuleName)
}
case connection.SubModuleName:
switch path[1] {
case connection.QueryAllConnections:
res, err = connection.QuerierConnections(ctx, req, k.ConnectionKeeper)
case connection.QueryAllClientConnections:
res, err = connection.QuerierAllClientConnections(ctx, req, k.ConnectionKeeper)
case connection.QueryClientConnections:
res, err = connection.QuerierClientConnections(ctx, req, k.ConnectionKeeper)
default:
err = sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown IBC %s query endpoint", connection.SubModuleName)
}
case channel.SubModuleName:
switch path[1] {
case channel.QueryAllChannels:
res, err = channel.QuerierChannels(ctx, req, k.ChannelKeeper)
case channel.QueryConnectionChannels:
res, err = channel.QuerierConnectionChannels(ctx, req, k.ChannelKeeper)
case channel.QueryPacketCommitments:
res, err = channel.QuerierPacketCommitments(ctx, req, k.ChannelKeeper)
case channel.QueryUnrelayedAcknowledgements:
res, err = channel.QuerierUnrelayedAcknowledgements(ctx, req, k.ChannelKeeper)
case channel.QueryUnrelayedPacketSends:
res, err = channel.QuerierUnrelayedPacketSends(ctx, req, k.ChannelKeeper)
default:
err = sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown IBC %s query endpoint", channel.SubModuleName)
}
default:
err = sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown IBC query endpoint")
}
return res, err
}
}