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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
use crate::streaming_client::Epoch;
use diem_data_client::{Response, ResponsePayload};
use diem_types::{
account_state_blob::AccountStatesChunkWithProof,
ledger_info::LedgerInfoWithSignatures,
transaction::{TransactionListWithProof, TransactionOutputListWithProof, Version},
};
use std::fmt::{Debug, Formatter};
pub type NotificationId = u64;
#[derive(Clone, Debug)]
pub struct DataNotification {
pub notification_id: NotificationId,
pub data_payload: DataPayload,
}
#[allow(clippy::large_enum_variant)]
#[derive(Clone, Debug)]
pub enum DataPayload {
AccountStatesWithProof(AccountStatesChunkWithProof),
ContinuousTransactionOutputsWithProof(LedgerInfoWithSignatures, TransactionOutputListWithProof),
ContinuousTransactionsWithProof(LedgerInfoWithSignatures, TransactionListWithProof),
EpochEndingLedgerInfos(Vec<LedgerInfoWithSignatures>),
EndOfStream,
TransactionOutputsWithProof(TransactionOutputListWithProof),
TransactionsWithProof(TransactionListWithProof),
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum DataClientRequest {
AccountsWithProof(AccountsWithProofRequest),
EpochEndingLedgerInfos(EpochEndingLedgerInfosRequest),
NumberOfAccounts(NumberOfAccountsRequest),
TransactionsWithProof(TransactionsWithProofRequest),
TransactionOutputsWithProof(TransactionOutputsWithProofRequest),
}
impl DataClientRequest {
pub fn get_label(&self) -> &'static str {
match self {
Self::AccountsWithProof(_) => "accounts_with_proof",
Self::EpochEndingLedgerInfos(_) => "epoch_ending_ledger_infos",
Self::NumberOfAccounts(_) => "number_of_accounts",
Self::TransactionsWithProof(_) => "transactions_with_proof",
Self::TransactionOutputsWithProof(_) => "transaction_outputs_with_proof",
}
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct AccountsWithProofRequest {
pub version: Version,
pub start_index: u64,
pub end_index: u64,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct EpochEndingLedgerInfosRequest {
pub start_epoch: Epoch,
pub end_epoch: Epoch,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct NumberOfAccountsRequest {
pub version: Version,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TransactionsWithProofRequest {
pub start_version: Version,
pub end_version: Version,
pub proof_version: Version,
pub include_events: bool,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TransactionOutputsWithProofRequest {
pub start_version: Version,
pub end_version: Version,
pub proof_version: Version,
}
pub struct PendingClientResponse {
pub client_request: DataClientRequest,
pub client_response: Option<Result<Response<ResponsePayload>, diem_data_client::Error>>,
}
impl Debug for PendingClientResponse {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(
f,
"Client request: {:?}, client response: {:?}",
self.client_request, self.client_response
)
}
}