use crate::streaming_client::Epoch;
use aptos_data_client::{Response, ResponsePayload};
use aptos_types::{
ledger_info::LedgerInfoWithSignatures,
state_store::state_value::StateValueChunkWithProof,
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 {
ContinuousTransactionOutputsWithProof(LedgerInfoWithSignatures, TransactionOutputListWithProof),
ContinuousTransactionsWithProof(LedgerInfoWithSignatures, TransactionListWithProof),
EpochEndingLedgerInfos(Vec<LedgerInfoWithSignatures>),
EndOfStream,
StateValuesWithProof(StateValueChunkWithProof),
TransactionOutputsWithProof(TransactionOutputListWithProof),
TransactionsWithProof(TransactionListWithProof),
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum DataClientRequest {
EpochEndingLedgerInfos(EpochEndingLedgerInfosRequest),
NewTransactionOutputsWithProof(NewTransactionOutputsWithProofRequest),
NewTransactionsWithProof(NewTransactionsWithProofRequest),
NumberOfStates(NumberOfStatesRequest),
StateValuesWithProof(StateValuesWithProofRequest),
TransactionsWithProof(TransactionsWithProofRequest),
TransactionOutputsWithProof(TransactionOutputsWithProofRequest),
}
impl DataClientRequest {
pub fn get_label(&self) -> &'static str {
match self {
Self::EpochEndingLedgerInfos(_) => "epoch_ending_ledger_infos",
Self::NewTransactionOutputsWithProof(_) => "new_transaction_outputs_with_proof",
Self::NewTransactionsWithProof(_) => "new_transactions_with_proof",
Self::NumberOfStates(_) => "number_of_states",
Self::StateValuesWithProof(_) => "state_values_with_proof",
Self::TransactionsWithProof(_) => "transactions_with_proof",
Self::TransactionOutputsWithProof(_) => "transaction_outputs_with_proof",
}
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct StateValuesWithProofRequest {
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 NewTransactionsWithProofRequest {
pub known_version: Version,
pub known_epoch: Epoch,
pub include_events: bool,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct NewTransactionOutputsWithProofRequest {
pub known_version: Version,
pub known_epoch: Epoch,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct NumberOfStatesRequest {
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>, aptos_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
)
}
}