package wasm
import (
"encoding/json"
"fmt"
pluginstypes "github.com/cybercongress/go-cyber/v7/plugins/types"
wasmvmtypes "github.com/CosmWasm/wasmvm/types"
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
bindingstypes "github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm/types"
)
func (querier *Querier) HandleQuery(ctx sdk.Context, query pluginstypes.CyberQuery) ([]byte, error) {
switch {
case query.FullDenom != nil:
creator := query.FullDenom.CreatorAddr
subdenom := query.FullDenom.Subdenom
fullDenom, err := GetFullDenom(creator, subdenom)
if err != nil {
return nil, errorsmod.Wrap(err, "osmo full denom query")
}
res := bindingstypes.FullDenomResponse{
Denom: fullDenom,
}
bz, err := json.Marshal(res)
if err != nil {
return nil, errorsmod.Wrap(err, "failed to marshal FullDenomResponse")
}
return bz, nil
case query.Admin != nil:
res, err := querier.GetDenomAdmin(ctx, query.Admin.Denom)
if err != nil {
return nil, err
}
bz, err := json.Marshal(res)
if err != nil {
return nil, fmt.Errorf("failed to JSON marshal AdminResponse: %w", err)
}
return bz, nil
case query.Metadata != nil:
res, err := querier.GetMetadata(ctx, query.Metadata.Denom)
if err != nil {
return nil, err
}
bz, err := json.Marshal(res)
if err != nil {
return nil, fmt.Errorf("failed to JSON marshal MetadataResponse: %w", err)
}
return bz, nil
case query.DenomsByCreator != nil:
res, err := querier.GetDenomsByCreator(ctx, query.DenomsByCreator.Creator)
if err != nil {
return nil, err
}
bz, err := json.Marshal(res)
if err != nil {
return nil, fmt.Errorf("failed to JSON marshal DenomsByCreatorResponse: %w", err)
}
return bz, nil
case query.Params != nil:
res, err := querier.GetParams(ctx)
if err != nil {
return nil, err
}
bz, err := json.Marshal(res)
if err != nil {
return nil, fmt.Errorf("failed to JSON marshal ParamsResponse: %w", err)
}
return bz, nil
default:
return nil, pluginstypes.ErrHandleQuery
}
}
func ConvertSdkCoinsToWasmCoins(coins []sdk.Coin) wasmvmtypes.Coins {
var toSend wasmvmtypes.Coins
for _, coin := range coins {
c := ConvertSdkCoinToWasmCoin(coin)
toSend = append(toSend, c)
}
return toSend
}
func ConvertSdkCoinToWasmCoin(coin sdk.Coin) wasmvmtypes.Coin {
return wasmvmtypes.Coin{
Denom: coin.Denom,
Amount: coin.Amount.String(),
}
}