From 69175d1e6c1482c8a2c3cbc2896496dc209e25e2 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 6 Oct 2022 15:42:41 +0000 Subject: [PATCH] Correct `rapid-gossip-sync` `no-std` build and test While `rapid-gossip-sync` recently gained a `no-std` feature, it didn't actually work, as there were still dangling references to `std` and prelude assumptions. This makes `rapid-gossip-sync` build (and test) properly in `no-std`. --- lightning-rapid-gossip-sync/Cargo.toml | 2 +- lightning-rapid-gossip-sync/src/error.rs | 8 ++++---- lightning-rapid-gossip-sync/src/lib.rs | 7 +++++++ lightning-rapid-gossip-sync/src/processing.rs | 9 ++++++--- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lightning-rapid-gossip-sync/Cargo.toml b/lightning-rapid-gossip-sync/Cargo.toml index 2fa598dc1..4dec0aa85 100644 --- a/lightning-rapid-gossip-sync/Cargo.toml +++ b/lightning-rapid-gossip-sync/Cargo.toml @@ -16,7 +16,7 @@ std = ["lightning/std"] _bench_unstable = [] [dependencies] -lightning = { version = "0.0.111", path = "../lightning" } +lightning = { version = "0.0.111", path = "../lightning", default-features = false } bitcoin = { version = "0.29.0", default-features = false } [dev-dependencies] diff --git a/lightning-rapid-gossip-sync/src/error.rs b/lightning-rapid-gossip-sync/src/error.rs index fee8feafc..ffd6760f8 100644 --- a/lightning-rapid-gossip-sync/src/error.rs +++ b/lightning-rapid-gossip-sync/src/error.rs @@ -1,5 +1,5 @@ use core::fmt::Debug; -use std::fmt::Formatter; +use core::fmt::Formatter; use lightning::ln::msgs::{DecodeError, LightningError}; /// All-encompassing standard error type that processing can return @@ -12,8 +12,8 @@ pub enum GraphSyncError { LightningError(LightningError), } -impl From for GraphSyncError { - fn from(error: std::io::Error) -> Self { +impl From for GraphSyncError { + fn from(error: lightning::io::Error) -> Self { Self::DecodeError(DecodeError::Io(error.kind())) } } @@ -31,7 +31,7 @@ impl From for GraphSyncError { } impl Debug for GraphSyncError { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result { match self { GraphSyncError::DecodeError(e) => f.write_fmt(format_args!("DecodeError: {:?}", e)), GraphSyncError::LightningError(e) => f.write_fmt(format_args!("LightningError: {:?}", e)) diff --git a/lightning-rapid-gossip-sync/src/lib.rs b/lightning-rapid-gossip-sync/src/lib.rs index d948d447b..72fc1f719 100644 --- a/lightning-rapid-gossip-sync/src/lib.rs +++ b/lightning-rapid-gossip-sync/src/lib.rs @@ -60,11 +60,16 @@ //! ``` //! [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 core::ops::Deref; @@ -156,6 +161,7 @@ mod tests { use crate::RapidGossipSync; #[test] + #[cfg(feature = "std")] fn test_sync_from_file() { struct FileSyncTest { directory: String, @@ -243,6 +249,7 @@ mod tests { } #[test] + #[cfg(feature = "std")] fn measure_native_read_from_file() { let block_hash = genesis_block(Network::Bitcoin).block_hash(); let logger = TestLogger::new(); diff --git a/lightning-rapid-gossip-sync/src/processing.rs b/lightning-rapid-gossip-sync/src/processing.rs index 18f991631..3a60b7c98 100644 --- a/lightning-rapid-gossip-sync/src/processing.rs +++ b/lightning-rapid-gossip-sync/src/processing.rs @@ -16,6 +16,9 @@ use lightning::io; use crate::error::GraphSyncError; use crate::RapidGossipSync; +#[cfg(not(feature = "std"))] +use alloc::{vec::Vec, borrow::ToOwned}; + /// The purpose of this prefix is to identify the serialization format, should other rapid gossip /// sync formats arise in the future. /// @@ -47,7 +50,7 @@ impl>, L: Deref> RapidGossipSync where L let backdated_timestamp = latest_seen_timestamp.saturating_sub(24 * 3600 * 7); let node_id_count: u32 = Readable::read(read_cursor)?; - let mut node_ids: Vec = Vec::with_capacity(std::cmp::min( + let mut node_ids: Vec = Vec::with_capacity(core::cmp::min( node_id_count, MAX_INITIAL_NODE_ID_VECTOR_CAPACITY, ) as usize); @@ -132,7 +135,7 @@ impl>, L: Deref> RapidGossipSync where L htlc_maximum_msat: default_htlc_maximum_msat, fee_base_msat: default_fee_base_msat, fee_proportional_millionths: default_fee_proportional_millionths, - excess_data: vec![], + excess_data: Vec::new(), } } else { // incremental update, field flags will indicate mutated values @@ -162,7 +165,7 @@ impl>, L: Deref> RapidGossipSync where L htlc_maximum_msat: directional_info.htlc_maximum_msat, fee_base_msat: directional_info.fees.base_msat, fee_proportional_millionths: directional_info.fees.proportional_millionths, - excess_data: vec![], + excess_data: Vec::new(), } }; -- 2.39.5