Skip to content

Commit

Permalink
expose persistent log write method
Browse files Browse the repository at this point in the history
  • Loading branch information
dkijania committed Sep 24, 2021
1 parent d81f17e commit 0b62d60
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
Expand Up @@ -8,7 +8,7 @@ pub use self::{
generator::FragmentGenerator,
initial_certificates::{signed_delegation_cert, signed_stake_pool_cert, vote_plan_cert},
node::{FragmentNode, FragmentNodeError, MemPoolCheck},
persistent_log::PersistentLogViewer,
persistent_log::{write_into_persistent_log, PersistentLogViewer},
sender::{FragmentSender, FragmentSenderError},
setup::DummySyncNode,
setup::{FragmentSenderSetup, FragmentSenderSetupBuilder, VerifyStrategy},
Expand Down
@@ -1,7 +1,12 @@
use bincode::Options;
use chain_core::property::Serialize;
use chain_impl_mockchain::fragment::Fragment;
use jormungandr_lib::interfaces::load_persistent_fragments_logs_from_folder_path;
use std::path::PathBuf;
use jormungandr_lib::interfaces::{
load_persistent_fragments_logs_from_folder_path, PersistentFragmentLog,
};
use std::fs::File;
use std::io::{BufWriter, Write};
use std::path::{Path, PathBuf};

pub struct PersistentLogViewer {
dir: PathBuf,
Expand Down Expand Up @@ -30,3 +35,26 @@ impl PersistentLogViewer {
self.get_all().len()
}
}
pub fn write_into_persistent_log<P: AsRef<Path>>(
persistent_log: P,
entries: Vec<PersistentFragmentLog>,
) -> Result<(), Error> {
let mut output = BufWriter::with_capacity(128 * 1024, File::open(persistent_log.as_ref())?);

for entry in entries {
let codec = bincode::DefaultOptions::new().with_fixint_encoding();
let serialized = codec
.serialize(&entry)
.map_err(|_| Error::CannotSerializeEntry)?;
output.write_all(&serialized)?;
}
Ok(())
}

#[derive(custom_debug::Debug, thiserror::Error)]
pub enum Error {
#[error("cannot serialize entry of persistent log")]
CannotSerializeEntry,
#[error("cannot serialize entry of persistent log")]
Io(#[from] std::io::Error),
}

0 comments on commit 0b62d60

Please sign in to comment.