use num_bigint::BigUint;
use num_traits::ToPrimitive;
use serde::{Deserialize, Serialize};
use crate::impl_from_uint_for;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, Hash, Copy)]
pub enum TransactionType {
WalletRegister = 100,
Deposit = 200,
Withdrawal = 201,
ForceWithdrawal = 202,
Transfer = 300,
ResetMainSecret = 400,
CreateApiSecret = 401,
DestroyApiSecret = 402,
SubmitSpotOrder = 500,
CancelSpotOrder = 501,
AddAmmV2Liquidity = 600,
RemoveAmmV2Liquidity = 601,
RegisterAsset = 700,
UpdateGlobalWithdrawalFeeTo = 701,
UpdateAssetWithdrawalFeeTo = 702,
UpdateChainConfirmationTimes = 800,
RegisterSpotMarket = 900,
UpdateSpotMarketTradingSettings = 901,
UpdateSpotMarketInitialFeeTo = 902,
UpdateSpotMarketFeeTo = 903,
UpdateSpotMarketInitialTradingFee = 904,
UpdateSpotMarketTradingFee = 905,
}
impl TransactionType {
pub fn iterator() -> impl Iterator<Item = TransactionType> {
[
TransactionType::WalletRegister,
TransactionType::Deposit,
TransactionType::Withdrawal,
TransactionType::ForceWithdrawal,
TransactionType::Transfer,
TransactionType::ResetMainSecret,
TransactionType::CreateApiSecret,
TransactionType::DestroyApiSecret,
TransactionType::SubmitSpotOrder,
TransactionType::CancelSpotOrder,
TransactionType::AddAmmV2Liquidity,
TransactionType::RemoveAmmV2Liquidity,
TransactionType::RegisterAsset,
TransactionType::UpdateGlobalWithdrawalFeeTo,
TransactionType::UpdateAssetWithdrawalFeeTo,
TransactionType::UpdateChainConfirmationTimes,
TransactionType::RegisterSpotMarket,
TransactionType::UpdateSpotMarketTradingSettings,
TransactionType::UpdateSpotMarketInitialFeeTo,
TransactionType::UpdateSpotMarketFeeTo,
TransactionType::UpdateSpotMarketInitialTradingFee,
TransactionType::UpdateSpotMarketTradingFee,
]
.iter()
.copied()
}
}
impl From<BigUint> for TransactionType {
fn from(value: BigUint) -> Self {
match value.to_u64().unwrap() {
100 => TransactionType::WalletRegister,
200 => TransactionType::Deposit,
201 => TransactionType::Withdrawal,
202 => TransactionType::ForceWithdrawal,
300 => TransactionType::Transfer,
400 => TransactionType::ResetMainSecret,
401 => TransactionType::CreateApiSecret,
402 => TransactionType::DestroyApiSecret,
500 => TransactionType::SubmitSpotOrder,
501 => TransactionType::CancelSpotOrder,
600 => TransactionType::AddAmmV2Liquidity,
601 => TransactionType::RemoveAmmV2Liquidity,
700 => TransactionType::RegisterAsset,
701 => TransactionType::UpdateGlobalWithdrawalFeeTo,
702 => TransactionType::UpdateAssetWithdrawalFeeTo,
800 => TransactionType::UpdateChainConfirmationTimes,
900 => TransactionType::RegisterSpotMarket,
901 => TransactionType::UpdateSpotMarketTradingSettings,
902 => TransactionType::UpdateSpotMarketInitialFeeTo,
903 => TransactionType::UpdateSpotMarketFeeTo,
904 => TransactionType::UpdateSpotMarketInitialTradingFee,
905 => TransactionType::UpdateSpotMarketTradingFee,
_ => panic!("Invalid transaction type"),
}
}
}
impl Into<BigUint> for TransactionType {
fn into(self) -> BigUint {
BigUint::from(self as u128)
}
}
impl_from_uint_for!(TransactionType, u32, u64, u128);