use crate::effects::{TransactionEffects, TransactionEvents};
use crate::messages_checkpoint::{CertifiedCheckpointSummary, CheckpointContents};
use crate::object::Object;
use crate::transaction::Transaction;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CheckpointData {
pub checkpoint_summary: CertifiedCheckpointSummary,
pub checkpoint_contents: CheckpointContents,
pub transactions: Vec<CheckpointTransaction>,
}
impl CheckpointData {
pub fn output_objects(&self) -> Vec<&Object> {
self.transactions
.iter()
.flat_map(|tx| &tx.output_objects)
.collect()
}
pub fn input_objects(&self) -> Vec<&Object> {
self.transactions
.iter()
.flat_map(|tx| &tx.input_objects)
.collect()
}
pub fn all_objects(&self) -> Vec<&Object> {
self.transactions
.iter()
.flat_map(|tx| &tx.input_objects)
.chain(self.transactions.iter().flat_map(|tx| &tx.output_objects))
.collect()
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct CheckpointTransaction {
pub transaction: Transaction,
pub effects: TransactionEffects,
pub events: Option<TransactionEvents>,
pub input_objects: Vec<Object>,
pub output_objects: Vec<Object>,
}