use crate::currency::DecCoin;
use nym_validator_client::nyxd::Fee;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "generate-ts", derive(ts_rs::TS))]
#[cfg_attr(
feature = "generate-ts",
ts(export, export_to = "ts-packages/types/src/types/rust/FeeDetails.ts")
)]
pub struct FeeDetails {
pub amount: Option<DecCoin>,
#[cfg_attr(feature = "generate-ts", ts(as = "ts_type_helpers::Fee"))]
pub fee: Fee,
}
impl FeeDetails {
pub fn new(amount: Option<DecCoin>, fee: Fee) -> Self {
FeeDetails { amount, fee }
}
}
#[cfg(feature = "generate-ts")]
pub mod ts_type_helpers {
use nym_validator_client::nyxd::GasAdjustment;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, ts_rs::TS)]
#[ts(export, export_to = "ts-packages/types/src/types/rust/Fee.ts")]
pub enum Fee {
Manual(CosmosFee),
Auto(Option<GasAdjustment>),
}
#[derive(Debug, Clone, Serialize, Deserialize, ts_rs::TS)]
#[ts(export, export_to = "ts-packages/types/src/types/rust/CosmosFee.ts")]
pub struct CosmosFee {
amount: Vec<Coin>,
gas_limit: u64,
payer: Option<String>,
granter: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ts_rs::TS)]
#[ts(export, export_to = "ts-packages/types/src/types/rust/Coin.ts")]
pub struct Coin {
denom: String,
amount: u64,
}
}