X-Git-Url: http://git.bitcoin.ninja/index.cgi?p=ldk-sample;a=blobdiff_plain;f=src%2Fdisk.rs;h=7be070c962f4d73e3c9445c8a5a8730fedd71fe3;hp=b641ebb053167b01c6f397c1ef40d0decd98ad61;hb=e31773bd74197082c327fdeb878f28664ee65e21;hpb=7a39a4df612ae282fcf2329be8fc1bf8da8a84db diff --git a/src/disk.rs b/src/disk.rs index b641ebb..7be070c 100644 --- a/src/disk.rs +++ b/src/disk.rs @@ -3,6 +3,7 @@ use bitcoin::secp256k1::key::PublicKey; use bitcoin::BlockHash; use chrono::Utc; use lightning::routing::network_graph::NetworkGraph; +use lightning::routing::scorer::Scorer; use lightning::util::logger::{Logger, Record}; use lightning::util::ser::{Readable, Writeable, Writer}; use std::collections::HashMap; @@ -92,3 +93,25 @@ pub(crate) fn read_network(path: &Path, genesis_hash: BlockHash) -> NetworkGraph } NetworkGraph::new(genesis_hash) } + +pub(crate) fn persist_scorer(path: &Path, scorer: &Scorer) -> std::io::Result<()> { + let mut tmp_path = path.to_path_buf().into_os_string(); + tmp_path.push(".tmp"); + let file = fs::OpenOptions::new().write(true).create(true).open(&tmp_path)?; + let write_res = scorer.write(&mut BufWriter::new(file)); + if let Err(e) = write_res.and_then(|_| fs::rename(&tmp_path, path)) { + let _ = fs::remove_file(&tmp_path); + Err(e) + } else { + Ok(()) + } +} + +pub(crate) fn read_scorer(path: &Path) -> Scorer { + if let Ok(file) = File::open(path) { + if let Ok(scorer) = Scorer::read(&mut BufReader::new(file)) { + return scorer; + } + } + Scorer::default() +}