ic_web3_rs/types/
parity_pending_transaction.rs1use serde::{
2 ser::{SerializeMap, Serializer},
3 Serialize,
4};
5
6use super::{Address, U256, U64};
7
8#[derive(Clone, Serialize)]
10pub enum FilterCondition<T> {
11 #[serde(rename(serialize = "lt"))]
13 LowerThan(T),
14 #[serde(rename(serialize = "eq"))]
16 Equal(T),
17 #[serde(rename(serialize = "gt"))]
19 GreaterThan(T),
20}
21
22impl<T> From<T> for FilterCondition<T> {
23 fn from(t: T) -> Self {
24 FilterCondition::Equal(t)
25 }
26}
27
28#[derive(Clone)]
30pub enum ToFilter {
31 Address(Address),
33 Action,
35}
36
37#[derive(Clone, Default, Serialize)]
39pub struct ParityPendingTransactionFilter {
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub from: Option<FilterCondition<Address>>,
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub to: Option<ToFilter>,
46 #[serde(skip_serializing_if = "Option::is_none")]
48 pub gas: Option<FilterCondition<U64>>,
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub gas_price: Option<FilterCondition<U64>>,
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub value: Option<FilterCondition<U256>>,
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub nonce: Option<FilterCondition<U256>>,
58}
59
60impl Serialize for ToFilter {
61 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
62 where
63 S: Serializer,
64 {
65 let mut map = serializer.serialize_map(Some(1))?;
66
67 match self {
68 Self::Address(a) => map.serialize_entry("eq", a)?,
69 Self::Action => map.serialize_entry("action", "contract_creation")?,
70 }
71 map.end()
72 }
73}
74
75impl ParityPendingTransactionFilter {
76 pub fn builder() -> ParityPendingTransactionFilterBuilder {
78 Default::default()
79 }
80}
81
82#[derive(Default, Clone)]
84pub struct ParityPendingTransactionFilterBuilder {
85 filter: ParityPendingTransactionFilter,
86}
87
88impl ParityPendingTransactionFilterBuilder {
89 pub fn from(mut self, from: Address) -> Self {
91 self.filter.from = Some(FilterCondition::Equal(from));
92 self
93 }
94
95 pub fn to(mut self, to_or_action: ToFilter) -> Self {
97 self.filter.to = Some(to_or_action);
98 self
99 }
100
101 pub fn gas(mut self, gas: impl Into<FilterCondition<U64>>) -> Self {
103 self.filter.gas = Some(gas.into());
104 self
105 }
106
107 pub fn gas_price(mut self, gas_price: impl Into<FilterCondition<U64>>) -> Self {
109 self.filter.gas_price = Some(gas_price.into());
110 self
111 }
112
113 pub fn value(mut self, value: impl Into<FilterCondition<U256>>) -> Self {
115 self.filter.value = Some(value.into());
116 self
117 }
118
119 pub fn nonce(mut self, nonce: impl Into<FilterCondition<U256>>) -> Self {
121 self.filter.nonce = Some(nonce.into());
122 self
123 }
124
125 pub fn build(&self) -> ParityPendingTransactionFilter {
127 self.filter.clone()
128 }
129}