2023-03-16 08:25:26 -07:00
|
|
|
use tokio::{task::JoinHandle, sync::broadcast::Receiver};
|
|
|
|
use async_std::fs::File;
|
2023-03-14 05:39:19 -07:00
|
|
|
use crate::states::{BlockData, TransactionConfirmRecord};
|
|
|
|
|
|
|
|
pub fn initialize_result_writers(
|
|
|
|
transaction_save_file: String,
|
|
|
|
block_data_save_file: String,
|
|
|
|
tx_data: Receiver<TransactionConfirmRecord>,
|
|
|
|
block_data: Receiver<BlockData>,
|
|
|
|
) -> Vec<JoinHandle<()>> {
|
|
|
|
let mut tasks = vec![];
|
|
|
|
|
|
|
|
if !transaction_save_file.is_empty() {
|
|
|
|
let tx_data_jh = tokio::spawn(async move {
|
2023-03-16 08:25:26 -07:00
|
|
|
let mut writer = csv_async::AsyncSerializer::from_writer(
|
|
|
|
File::create(transaction_save_file).await.unwrap()
|
|
|
|
);
|
|
|
|
let mut tx_data = tx_data;
|
2023-03-14 05:39:19 -07:00
|
|
|
loop {
|
|
|
|
if let Ok(record) = tx_data.recv().await {
|
2023-03-16 08:25:26 -07:00
|
|
|
writer.serialize(record).await.unwrap();
|
2023-03-14 05:39:19 -07:00
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2023-03-16 08:25:26 -07:00
|
|
|
writer.flush().await.unwrap();
|
2023-03-14 05:39:19 -07:00
|
|
|
});
|
|
|
|
tasks.push(tx_data_jh);
|
|
|
|
}
|
|
|
|
|
|
|
|
if !block_data_save_file.is_empty() {
|
|
|
|
let block_data_jh = tokio::spawn(async move {
|
2023-03-16 08:25:26 -07:00
|
|
|
let mut writer = csv_async::AsyncSerializer::from_writer(
|
|
|
|
File::create(block_data_save_file).await.unwrap()
|
|
|
|
);
|
|
|
|
let mut block_data = block_data;
|
2023-03-14 05:39:19 -07:00
|
|
|
loop {
|
|
|
|
if let Ok(record) = block_data.recv().await {
|
2023-03-16 08:25:26 -07:00
|
|
|
writer.serialize(record).await.unwrap();
|
2023-03-14 05:39:19 -07:00
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2023-03-16 08:25:26 -07:00
|
|
|
writer.flush().await.unwrap();
|
2023-03-14 05:39:19 -07:00
|
|
|
});
|
|
|
|
tasks.push(block_data_jh);
|
|
|
|
}
|
|
|
|
tasks
|
|
|
|
}
|