use algonaut_crypto::{HashDigest, deserialize_opt_hash};
use algonaut_encoding::Bytes;
#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)]
pub struct Transaction {
#[serde(
rename = "application-transaction",
skip_serializing_if = "Option::is_none"
)]
pub application_transaction: Option<Box<crate::models::TransactionApplication>>,
#[serde(
rename = "asset-config-transaction",
skip_serializing_if = "Option::is_none"
)]
pub asset_config_transaction: Option<Box<crate::models::TransactionAssetConfig>>,
#[serde(
rename = "asset-freeze-transaction",
skip_serializing_if = "Option::is_none"
)]
pub asset_freeze_transaction: Option<Box<crate::models::TransactionAssetFreeze>>,
#[serde(
rename = "asset-transfer-transaction",
skip_serializing_if = "Option::is_none"
)]
pub asset_transfer_transaction: Option<Box<crate::models::TransactionAssetTransfer>>,
#[serde(rename = "auth-addr", skip_serializing_if = "Option::is_none")]
pub auth_addr: Option<String>,
#[serde(rename = "close-rewards", skip_serializing_if = "Option::is_none")]
pub close_rewards: Option<u64>,
#[serde(rename = "closing-amount", skip_serializing_if = "Option::is_none")]
pub closing_amount: Option<u64>,
#[serde(rename = "confirmed-round", skip_serializing_if = "Option::is_none")]
pub confirmed_round: Option<u64>,
#[serde(
rename = "created-application-index",
skip_serializing_if = "Option::is_none"
)]
pub created_application_index: Option<u64>,
#[serde(
rename = "created-asset-index",
skip_serializing_if = "Option::is_none"
)]
pub created_asset_index: Option<u64>,
#[serde(rename = "fee")]
pub fee: u64,
#[serde(rename = "first-valid")]
pub first_valid: u64,
#[serde(
rename = "genesis-hash",
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_opt_hash",
default
)]
pub genesis_hash: Option<HashDigest>,
#[serde(rename = "genesis-id", skip_serializing_if = "Option::is_none")]
pub genesis_id: Option<String>,
#[serde(rename = "global-state-delta", skip_serializing_if = "Option::is_none")]
pub global_state_delta: Option<Vec<crate::models::EvalDeltaKeyValue>>,
#[serde(rename = "group", skip_serializing_if = "Option::is_none")]
pub group: Option<Bytes>,
#[serde(
rename = "heartbeat-transaction",
skip_serializing_if = "Option::is_none"
)]
pub heartbeat_transaction: Option<Box<crate::models::TransactionHeartbeat>>,
#[serde(rename = "id", skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(rename = "inner-txns", skip_serializing_if = "Option::is_none")]
pub inner_txns: Option<Vec<crate::models::Transaction>>,
#[serde(rename = "intra-round-offset", skip_serializing_if = "Option::is_none")]
pub intra_round_offset: Option<u64>,
#[serde(rename = "keyreg-transaction", skip_serializing_if = "Option::is_none")]
pub keyreg_transaction: Option<Box<crate::models::TransactionKeyreg>>,
#[serde(rename = "last-valid")]
pub last_valid: u64,
#[serde(rename = "lease", skip_serializing_if = "Option::is_none")]
pub lease: Option<Bytes>,
#[serde(rename = "local-state-delta", skip_serializing_if = "Option::is_none")]
pub local_state_delta: Option<Vec<crate::models::AccountStateDelta>>,
#[serde(rename = "logs", skip_serializing_if = "Option::is_none")]
pub logs: Option<Vec<Bytes>>,
#[serde(rename = "note", skip_serializing_if = "Option::is_none")]
pub note: Option<Bytes>,
#[serde(
rename = "payment-transaction",
skip_serializing_if = "Option::is_none"
)]
pub payment_transaction: Option<Box<crate::models::TransactionPayment>>,
#[serde(rename = "receiver-rewards", skip_serializing_if = "Option::is_none")]
pub receiver_rewards: Option<u64>,
#[serde(rename = "rekey-to", skip_serializing_if = "Option::is_none")]
pub rekey_to: Option<String>,
#[serde(rename = "round-time", skip_serializing_if = "Option::is_none")]
pub round_time: Option<u64>,
#[serde(rename = "sender")]
pub sender: String,
#[serde(rename = "sender-rewards", skip_serializing_if = "Option::is_none")]
pub sender_rewards: Option<u64>,
#[serde(rename = "signature", skip_serializing_if = "Option::is_none")]
pub signature: Option<Box<crate::models::TransactionSignature>>,
#[serde(
rename = "state-proof-transaction",
skip_serializing_if = "Option::is_none"
)]
pub state_proof_transaction: Option<Box<crate::models::TransactionStateProof>>,
#[serde(rename = "tx-type")]
pub tx_type: TxType,
}
impl Transaction {
pub fn new(
fee: u64,
first_valid: u64,
last_valid: u64,
sender: String,
tx_type: TxType,
) -> Transaction {
Transaction {
application_transaction: None,
asset_config_transaction: None,
asset_freeze_transaction: None,
asset_transfer_transaction: None,
auth_addr: None,
close_rewards: None,
closing_amount: None,
confirmed_round: None,
created_application_index: None,
created_asset_index: None,
fee,
first_valid,
genesis_hash: None,
genesis_id: None,
global_state_delta: None,
group: None,
heartbeat_transaction: None,
id: None,
inner_txns: None,
intra_round_offset: None,
keyreg_transaction: None,
last_valid,
lease: None,
local_state_delta: None,
logs: None,
note: None,
payment_transaction: None,
receiver_rewards: None,
rekey_to: None,
round_time: None,
sender,
sender_rewards: None,
signature: None,
state_proof_transaction: None,
tx_type,
}
}
}
#[derive(
Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, Default,
)]
pub enum TxType {
#[serde(rename = "pay")]
#[default]
Pay,
#[serde(rename = "keyreg")]
Keyreg,
#[serde(rename = "acfg")]
Acfg,
#[serde(rename = "axfer")]
Axfer,
#[serde(rename = "afrz")]
Afrz,
#[serde(rename = "appl")]
Appl,
#[serde(rename = "stpf")]
Stpf,
#[serde(rename = "hb")]
Hb,
}