1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//! Provides functions used for subscriptions

use super::Rpc;
use crate::types::{BlockHeader, FilterSubscription, Log, SyncInfoSubscription, H256, U128};
use std::marker::PhantomData;

/// Rpc to start a subscription
pub struct SubscriptionRequest<T> {
    pub(crate) rpc: Rpc<U128>,
    result_type: PhantomData<T>,
}

pub fn eth_subscribe_new_heads() -> SubscriptionRequest<BlockHeader> {
    let mut rpc = Rpc::new("eth_subscribe");
    rpc.add_param("newHeads");
    SubscriptionRequest {
        rpc,
        result_type: PhantomData,
    }
}

pub fn eth_subscribe_new_pending_transactions() -> SubscriptionRequest<H256> {
    let mut rpc = Rpc::new("eth_subscribe");
    rpc.add_param("newPendingTransactions");
    SubscriptionRequest {
        rpc,
        result_type: PhantomData,
    }
}

pub fn eth_subscribe_syncing() -> SubscriptionRequest<SyncInfoSubscription> {
    let mut rpc = Rpc::new("eth_subscribe");
    rpc.add_param("syncing");
    SubscriptionRequest {
        rpc,
        result_type: PhantomData,
    }
}

pub fn eth_subscribe_logs(filter: FilterSubscription) -> SubscriptionRequest<Log> {
    let mut rpc = Rpc::new("eth_subscribe");
    rpc.add_param("logs");
    rpc.add_param(filter);
    SubscriptionRequest {
        rpc,
        result_type: PhantomData,
    }
}

pub(crate) fn eth_unsubscribe(sub_id: U128) -> Rpc<bool> {
    let mut rpc = Rpc::new("eth_unsubscribe");
    rpc.add_param(sub_id);
    rpc
}