X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-block-sync%2Fsrc%2Flib.rs;h=3561a1b5d769f19381dfdf1bec1e7749cdf8c2d8;hb=afdcd1c19880a0e982184fbb576b392b45e1c795;hp=5d8bc27f8d141c2dcaaad9f1f53f97a25daa1cb0;hpb=c1938e8c9fb5d531dd735e889b2ab0f7bc8580b8;p=rust-lightning diff --git a/lightning-block-sync/src/lib.rs b/lightning-block-sync/src/lib.rs index 5d8bc27f..3561a1b5 100644 --- a/lightning-block-sync/src/lib.rs +++ b/lightning-block-sync/src/lib.rs @@ -28,6 +28,8 @@ pub mod http; pub mod init; pub mod poll; +pub mod gossip; + #[cfg(feature = "rest-client")] pub mod rest; @@ -98,7 +100,7 @@ pub struct BlockSourceError { } /// The kind of `BlockSourceError`, either persistent or transient. -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum BlockSourceErrorKind { /// Indicates an error that won't resolve when retrying a request (e.g., invalid data). Persistent, @@ -132,6 +134,9 @@ impl BlockSourceError { } /// Converts the error into the underlying error. + /// + /// May contain an [`std::io::Error`] from the [`BlockSource`]. See implementations for further + /// details, if any. pub fn into_inner(self) -> Box { self.error } @@ -139,7 +144,7 @@ impl BlockSourceError { /// A block header and some associated data. This information should be available from most block /// sources (and, notably, is available in Bitcoin Core's RPC and REST interfaces). -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct BlockHeaderData { /// The block header itself. pub header: BlockHeader, @@ -411,15 +416,15 @@ impl<'a, C: Cache, L: Deref> ChainNotifier<'a, C, L> where L::Target: chain::Lis let height = header.height; let block_data = chain_poller .fetch_block(&header).await - .or_else(|e| Err((e, Some(new_tip))))?; + .map_err(|e| (e, Some(new_tip)))?; debug_assert_eq!(block_data.block_hash, header.block_hash); match block_data.deref() { BlockData::FullBlock(block) => { - self.chain_listener.block_connected(&block, height); + self.chain_listener.block_connected(block, height); }, BlockData::HeaderOnly(header) => { - self.chain_listener.filtered_block_connected(&header, &[], height); + self.chain_listener.filtered_block_connected(header, &[], height); }, }