neo3/neo_protocol/responses/
neo_transfers.rs

1use 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	// Constructor function for Nep17Transfer
97	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
118// Custom deserialization function to convert a string into a u64
119fn 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
127// Optional: custom serialization function if you want to serialize `u64` back into `String`
128fn 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}