neo3/neo_protocol/responses/
neo_transfers.rs1use primitive_types::H256;
2use serde::{Deserialize, Deserializer, Serialize, Serializer};
3use std::str::FromStr;
4
5use neo3::prelude::{
6 deserialize_h256, deserialize_script_hash, serialize_h256, serialize_script_hash, ScriptHash,
7};
8
9#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Hash, Debug)]
10pub struct Nep11Transfers {
11 pub sent: Vec<Nep11Transfer>,
12 pub received: Vec<Nep11Transfer>,
13 #[serde(rename = "address")]
14 pub transfer_address: String,
15}
16
17#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Hash, Debug)]
18pub struct Nep11Transfer {
19 #[serde(rename = "tokenid")]
20 pub token_id: String,
21 pub timestamp: u64,
22 #[serde(rename = "assethash")]
23 #[serde(deserialize_with = "deserialize_script_hash")]
24 #[serde(serialize_with = "serialize_script_hash")]
25 pub asset_hash: ScriptHash,
26 #[serde(rename = "transferaddress")]
27 pub transfer_address: String,
28 #[serde(deserialize_with = "deserialize_amount")]
29 #[serde(serialize_with = "serialize_amount")]
30 pub amount: u64,
31 #[serde(rename = "blockindex")]
32 pub block_index: u32,
33 #[serde(rename = "transfernotifyindex")]
34 pub transfer_notify_index: u32,
35 #[serde(rename = "txhash")]
36 #[serde(serialize_with = "serialize_h256")]
37 #[serde(deserialize_with = "deserialize_h256")]
38 pub tx_hash: H256,
39}
40
41impl Nep11Transfer {
42 pub fn new(
43 timestamp: u64,
44 asset_hash: ScriptHash,
45 transfer_address: String,
46 amount: u64,
47 block_index: u32,
48 transfer_notify_index: u32,
49 tx_hash: H256,
50 token_id: String,
51 ) -> Self {
52 Nep11Transfer {
53 token_id,
54 timestamp,
55 asset_hash,
56 transfer_address,
57 amount,
58 block_index,
59 transfer_notify_index,
60 tx_hash,
61 }
62 }
63}
64
65#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Hash, Debug)]
66pub struct Nep17Transfers {
67 pub sent: Vec<Nep17Transfer>,
68 pub received: Vec<Nep17Transfer>,
69 #[serde(rename = "address")]
70 pub transfer_address: String,
71}
72
73#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Hash, Debug)]
74pub struct Nep17Transfer {
75 pub timestamp: u64,
76 #[serde(rename = "assethash")]
77 #[serde(deserialize_with = "deserialize_script_hash")]
78 #[serde(serialize_with = "serialize_script_hash")]
79 pub asset_hash: ScriptHash,
80 #[serde(rename = "transferaddress")]
81 pub transfer_address: String,
82 #[serde(deserialize_with = "deserialize_amount")]
83 #[serde(serialize_with = "serialize_amount")]
84 pub amount: u64,
85 #[serde(rename = "blockindex")]
86 pub block_index: u32,
87 #[serde(rename = "transfernotifyindex")]
88 pub transfer_notify_index: u32,
89 #[serde(rename = "txhash")]
90 #[serde(serialize_with = "serialize_h256")]
91 #[serde(deserialize_with = "deserialize_h256")]
92 pub tx_hash: H256,
93}
94
95impl Nep17Transfer {
96 pub fn new(
98 timestamp: u64,
99 asset_hash: ScriptHash,
100 transfer_address: String,
101 amount: u64,
102 block_index: u32,
103 transfer_notify_index: u32,
104 tx_hash: H256,
105 ) -> Self {
106 Self {
107 timestamp,
108 asset_hash,
109 transfer_address,
110 amount,
111 block_index,
112 transfer_notify_index,
113 tx_hash,
114 }
115 }
116}
117
118fn deserialize_amount<'de, D>(deserializer: D) -> Result<u64, D::Error>
120where
121 D: Deserializer<'de>,
122{
123 let s = String::deserialize(deserializer)?;
124 u64::from_str(&s).map_err(serde::de::Error::custom)
125}
126
127fn serialize_amount<S>(amount: &u64, serializer: S) -> Result<S::Ok, S::Error>
129where
130 S: Serializer,
131{
132 serializer.serialize_str(&amount.to_string())
133}