cosmos_client/client/
any_helper.rs1use crate::error::CosmosClient;
2use cosmos_sdk_proto::cosmos::auth::v1beta1::BaseAccount;
3use cosmos_sdk_proto::cosmos::crypto::ed25519::PubKey;
4use cosmos_sdk_proto::cosmos::evidence::v1beta1::Equivocation;
5use cosmos_sdk_proto::cosmos::feegrant::v1beta1::BasicAllowance;
6use cosmos_sdk_proto::cosmos::vesting::v1beta1::ContinuousVestingAccount;
7use cosmos_sdk_proto::Any;
8use cosmrs::bank::MsgSend;
9use prost::Message;
10
11#[derive(Debug)]
12pub enum CosmosType {
13 BaseAccount(BaseAccount),
14 ContinuousVestingAccount(ContinuousVestingAccount),
15 PubKey(PubKey),
16 Equivocation(Equivocation),
17 BasicAllowance(BasicAllowance),
18 MsgSend(MsgSend),
19}
20
21pub fn any_to_cosmos(cosmos: &Any) -> Result<CosmosType, CosmosClient> {
26 match cosmos.type_url.as_str() {
27 "/cosmos.auth.v1beta1.BaseAccount" => Ok(CosmosType::BaseAccount(BaseAccount::decode(
28 cosmos.value.as_slice(),
29 )?)),
30 "/cosmos.crypto.secp256k1.PubKey" => {
31 Ok(CosmosType::PubKey(PubKey::decode(cosmos.value.as_slice())?))
32 }
33 "/cosmos.evidence.v1beta1.Equivocation" => Ok(CosmosType::Equivocation(
34 Equivocation::decode(cosmos.value.as_slice())?,
35 )),
36 "/cosmos.feegrant.v1beta1.BasicAllowance" => Ok(CosmosType::BasicAllowance(
37 BasicAllowance::decode(cosmos.value.as_slice())?,
38 )),
39 "/cosmos.vesting.v1beta1.ContinuousVestingAccount" => {
40 Ok(CosmosType::ContinuousVestingAccount(
41 ContinuousVestingAccount::decode(cosmos.value.as_slice())?,
42 ))
43 }
44 _ => Err(CosmosClient::UnknownCosmosMsg),
45 }
46}