cfx_rpc_eth_types/
eth_pubsub.rs1use super::{EthRpcLogFilter, Header, Log};
8use cfx_types::H256;
9use serde::{de::Error, Deserialize, Deserializer, Serialize};
10use serde_json::{from_value, Value};
11
12#[allow(dead_code)]
14#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
15#[serde(untagged, rename_all = "camelCase")]
16pub enum Result {
19 Header(Header),
21
22 Log(Log),
24
25 TransactionHash(H256),
27}
28
29#[derive(Debug, Deserialize, PartialEq, Eq, Hash, Clone)]
31#[serde(deny_unknown_fields)]
32#[serde(rename_all = "camelCase")]
33pub enum Kind {
34 NewHeads,
36 Logs,
38 NewPendingTransactions,
40 Syncing,
42}
43
44#[derive(Debug, PartialEq, Eq, Hash, Clone)]
46pub enum Params {
47 None,
49 Logs(EthRpcLogFilter),
51}
52
53impl Default for Params {
54 fn default() -> Self { Params::None }
55}
56
57impl<'a> Deserialize<'a> for Params {
58 fn deserialize<D>(
59 deserializer: D,
60 ) -> ::std::result::Result<Params, D::Error>
61 where D: Deserializer<'a> {
62 let v: Value = Deserialize::deserialize(deserializer)?;
63
64 if v.is_null() {
65 return Ok(Params::None);
66 }
67
68 from_value(v.clone()).map(Params::Logs).map_err(|e| {
70 D::Error::custom(format!("Invalid Pub-Sub parameters: {}", e))
71 })
72 }
73}