use crate::{
crypto::PublicKey,
proto,
tx::{AccountNumber, SequenceNumber},
AccountId, ErrorReport, Result,
};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct BaseAccount {
pub address: AccountId,
pub pubkey: Option<PublicKey>,
pub account_number: AccountNumber,
pub sequence: SequenceNumber,
}
impl TryFrom<proto::cosmos::auth::v1beta1::BaseAccount> for BaseAccount {
type Error = ErrorReport;
fn try_from(proto: proto::cosmos::auth::v1beta1::BaseAccount) -> Result<BaseAccount> {
Ok(BaseAccount {
address: proto.address.parse()?,
pubkey: proto.pub_key.map(PublicKey::try_from).transpose()?,
account_number: proto.account_number,
sequence: proto.sequence,
})
}
}
impl From<BaseAccount> for proto::cosmos::auth::v1beta1::BaseAccount {
fn from(account: BaseAccount) -> proto::cosmos::auth::v1beta1::BaseAccount {
proto::cosmos::auth::v1beta1::BaseAccount {
address: account.address.to_string(),
pub_key: account.pubkey.map(Into::into),
account_number: account.account_number,
sequence: account.sequence,
}
}
}