X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-rapid-gossip-sync%2Fsrc%2Flib.rs;h=b347f69c1feea67f430359c4d0db89da716991a1;hb=fe1be693cf6317ae4b35ee3f1fe11896df64c9fa;hp=a8de1e43ae119c62e79cda9cc5f2370fd44e8860;hpb=484c0e89f734742fa292a2db6f887b931eab490d;p=rust-lightning diff --git a/lightning-rapid-gossip-sync/src/lib.rs b/lightning-rapid-gossip-sync/src/lib.rs index a8de1e43..b347f69c 100644 --- a/lightning-rapid-gossip-sync/src/lib.rs +++ b/lightning-rapid-gossip-sync/src/lib.rs @@ -38,7 +38,7 @@ //! //! After the gossip data snapshot has been downloaded, one of the client's graph processing //! functions needs to be called. In this example, we process the update by reading its contents -//! from disk, which we do by calling [sync_network_graph_with_file_path]: +//! from disk, which we do by calling [`RapidGossipSync::update_network_graph`]: //! //! ``` //! use bitcoin::blockdata::constants::genesis_block; @@ -56,26 +56,33 @@ //! let block_hash = genesis_block(Network::Bitcoin).header.block_hash(); //! let network_graph = NetworkGraph::new(block_hash, &logger); //! let rapid_sync = RapidGossipSync::new(&network_graph); -//! let new_last_sync_timestamp_result = rapid_sync.sync_network_graph_with_file_path("./rapid_sync.lngossip"); +//! let snapshot_contents: &[u8] = &[0; 0]; +//! let new_last_sync_timestamp_result = rapid_sync.update_network_graph(snapshot_contents); //! ``` -//! [sync_network_graph_with_file_path]: RapidGossipSync::sync_network_graph_with_file_path + +#![cfg_attr(all(not(feature = "std"), not(test)), no_std)] // Allow and import test features for benching #![cfg_attr(all(test, feature = "_bench_unstable"), feature(test))] #[cfg(all(test, feature = "_bench_unstable"))] extern crate test; +#[cfg(not(feature = "std"))] +extern crate alloc; + +#[cfg(feature = "std")] use std::fs::File; -use std::ops::Deref; -use std::sync::atomic::{AtomicBool, Ordering}; +use core::ops::Deref; +use core::sync::atomic::{AtomicBool, Ordering}; +use lightning::io; use lightning::routing::gossip::NetworkGraph; use lightning::util::logger::Logger; -pub use crate::error::GraphSyncError; +use crate::error::GraphSyncError; /// Error types that these functions can return -mod error; +pub mod error; /// Core functionality of this crate mod processing; @@ -107,6 +114,7 @@ impl>, L: Deref> RapidGossipSync where L /// /// `sync_path`: Path to the file where the gossip update data is located /// + #[cfg(feature = "std")] pub fn sync_network_graph_with_file_path( &self, sync_path: &str, @@ -115,6 +123,17 @@ impl>, L: Deref> RapidGossipSync where L self.update_network_graph_from_byte_stream(&mut file) } + /// Update network graph from binary data. + /// Returns the last sync timestamp to be used the next time rapid sync data is queried. + /// + /// `network_graph`: network graph to be updated + /// + /// `update_data`: `&[u8]` binary stream that comprises the update data + pub fn update_network_graph(&self, update_data: &[u8]) -> Result { + let mut read_cursor = io::Cursor::new(update_data); + self.update_network_graph_from_byte_stream(&mut read_cursor) + } + /// Gets a reference to the underlying [`NetworkGraph`] which was provided in /// [`RapidGossipSync::new`]. /// @@ -129,6 +148,7 @@ impl>, L: Deref> RapidGossipSync where L } } +#[cfg(feature = "std")] #[cfg(test)] mod tests { use std::fs;