Skip to content

Commit 94528f0

Browse files
authored
Merge pull request #947 from GeneFerneau/hash
Use hashbrown replacements for std equivalents
2 parents 4d1c1a3 + da7a851 commit 94528f0

17 files changed

+53
-24
lines changed

.github/workflows/build.yml

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,34 @@ jobs:
1414
# 1.41.0 is Debian stable
1515
1.41.0,
1616
# 1.45.2 is MSRV for lightning-net-tokio, lightning-block-sync, and coverage generation
17-
1.45.2]
17+
1.45.2,
18+
# 1.49.0 is MSRV for no_std builds using hashbrown
19+
1.49.0]
1820
include:
1921
- toolchain: stable
2022
build-net-tokio: true
23+
build-no-std: true
2124
- toolchain: stable
2225
platform: macos-latest
2326
build-net-tokio: true
27+
build-no-std: true
2428
- toolchain: stable
2529
platform: windows-latest
2630
build-net-tokio: true
31+
build-no-std: true
2732
- toolchain: beta
2833
build-net-tokio: true
34+
build-no-std: true
35+
- toolchain: 1.36.0
36+
build-no-std: false
37+
- toolchain: 1.41.0
38+
build-no-std: false
2939
- toolchain: 1.45.2
3040
build-net-tokio: true
41+
build-no-std: false
3142
coverage: true
43+
- toolchain: 1.49.0
44+
build-no-std: true
3245
runs-on: ${{ matrix.platform }}
3346
steps:
3447
- name: Checkout source code
@@ -47,7 +60,10 @@ jobs:
4760
run: RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always
4861
- name: Build on Rust ${{ matrix.toolchain }}
4962
if: "! matrix.build-net-tokio"
50-
run: cargo build --verbose --color always -p lightning && cargo build --verbose --color always -p lightning-invoice && cargo build --verbose --color always -p lightning-persister
63+
run: |
64+
cargo build --verbose --color always -p lightning
65+
cargo build --verbose --color always -p lightning-invoice
66+
cargo build --verbose --color always -p lightning-persister
5167
- name: Build Block Sync Clients on Rust ${{ matrix.toolchain }} with features
5268
if: "matrix.build-net-tokio && !matrix.coverage"
5369
run: |
@@ -56,7 +72,6 @@ jobs:
5672
cargo build --verbose --color always --features rpc-client
5773
cargo build --verbose --color always --features rpc-client,rest-client
5874
cargo build --verbose --color always --features rpc-client,rest-client,tokio
59-
cd ..
6075
- name: Build Block Sync Clients on Rust ${{ matrix.toolchain }} with features and full code-linking for coverage generation
6176
if: matrix.coverage
6277
run: |
@@ -65,16 +80,30 @@ jobs:
6580
RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features rpc-client
6681
RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features rpc-client,rest-client
6782
RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always --features rpc-client,rest-client,tokio
68-
cd ..
6983
- name: Test on Rust ${{ matrix.toolchain }} with net-tokio
7084
if: "matrix.build-net-tokio && !matrix.coverage"
7185
run: cargo test --verbose --color always
7286
- name: Test on Rust ${{ matrix.toolchain }} with net-tokio and full code-linking for coverage generation
7387
if: matrix.coverage
7488
run: RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always
89+
- name: Test on no_std bullds Rust ${{ matrix.toolchain }}
90+
if: "matrix.build-no-std && !matrix.coverage"
91+
run: |
92+
cd lightning
93+
cargo test --verbose --color always --features hashbrown
94+
cd ..
95+
- name: Test on no_std bullds Rust ${{ matrix.toolchain }} and full code-linking for coverage generation
96+
if: "matrix.build-no-std && matrix.coverage"
97+
run: |
98+
cd lightning
99+
RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --features hashbrown
100+
cd ..
75101
- name: Test on Rust ${{ matrix.toolchain }}
76102
if: "! matrix.build-net-tokio"
77-
run: cargo test --verbose --color always -p lightning && cargo test --verbose --color always -p lightning-invoice && cargo build --verbose --color always -p lightning-persister
103+
run: |
104+
cargo test --verbose --color always -p lightning
105+
cargo test --verbose --color always -p lightning-invoice
106+
cargo build --verbose --color always -p lightning-persister
78107
- name: Test Block Sync Clients on Rust ${{ matrix.toolchain }} with features
79108
if: "matrix.build-net-tokio && !matrix.coverage"
80109
run: |
@@ -83,7 +112,6 @@ jobs:
83112
cargo test --verbose --color always --features rpc-client
84113
cargo test --verbose --color always --features rpc-client,rest-client
85114
cargo test --verbose --color always --features rpc-client,rest-client,tokio
86-
cd ..
87115
- name: Test Block Sync Clients on Rust ${{ matrix.toolchain }} with features and full code-linking for coverage generation
88116
if: matrix.coverage
89117
run: |
@@ -92,7 +120,6 @@ jobs:
92120
RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --features rpc-client
93121
RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --features rpc-client,rest-client
94122
RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always --features rpc-client,rest-client,tokio
95-
cd ..
96123
- name: Install deps for kcov
97124
if: matrix.coverage
98125
run: |
@@ -157,6 +184,7 @@ jobs:
157184
run: |
158185
cd lightning
159186
RUSTFLAGS="--cfg=require_route_graph_test" cargo test
187+
RUSTFLAGS="--cfg=require_route_graph_test" cargo test --features hashbrown
160188
cd ..
161189
- name: Run benchmarks on Rust ${{ matrix.toolchain }}
162190
run: |

ci/check-compiles.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ cargo check
66
cargo doc
77
cargo doc --document-private-items
88
cd fuzz && cargo check --features=stdin_fuzz
9+
cd ../lightning && cargo check --no-default-features --features=no_std

lightning/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ max_level_debug = []
2525
# This is unsafe to use in production because it may result in the counterparty publishing taking our funds.
2626
unsafe_revoked_tx_signing = []
2727
unstable = []
28+
no_std = ["hashbrown"]
2829

2930
[dependencies]
3031
bitcoin = "0.26"
3132

33+
hashbrown = { version = "0.11", optional = true }
3234
hex = { version = "0.3", optional = true }
3335
regex = { version = "0.1.80", optional = true }
3436

lightning/src/chain/chainmonitor.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ use util::events;
3838
use util::events::EventHandler;
3939

4040
use prelude::*;
41-
use std::collections::{HashMap, hash_map};
4241
use std::sync::RwLock;
4342
use core::ops::Deref;
4443

lightning/src/chain/channelmonitor.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ use util::byte_utils;
5252
use util::events::Event;
5353

5454
use prelude::*;
55-
use std::collections::{HashMap, HashSet};
5655
use core::{cmp, mem};
5756
use std::io::Error;
5857
use core::ops::Deref;

lightning/src/chain/keysinterface.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ use ln::chan_utils::{HTLCOutputInCommitment, make_funding_redeemscript, ChannelP
3838
use ln::msgs::UnsignedChannelAnnouncement;
3939

4040
use prelude::*;
41-
use std::collections::HashSet;
4241
use core::sync::atomic::{AtomicUsize, Ordering};
4342
use std::io::Error;
4443
use ln::msgs::{DecodeError, MAX_VALUE_MSAT};

lightning/src/chain/onchaintx.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ use util::byte_utils;
3434

3535
use prelude::*;
3636
use alloc::collections::BTreeMap;
37-
use std::collections::HashMap;
3837
use core::cmp;
3938
use core::ops::Deref;
4039
use core::mem::replace;

lightning/src/lib.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,12 @@ pub mod ln;
4444
pub mod routing;
4545

4646
mod prelude {
47-
pub use alloc::{vec, vec::Vec, string::String};
48-
}
47+
#[cfg(feature = "hashbrown")]
48+
extern crate hashbrown;
49+
50+
pub use alloc::{vec, vec::Vec, string::String, collections::VecDeque};
51+
#[cfg(not(feature = "hashbrown"))]
52+
pub use std::collections::{HashMap, HashSet, hash_map};
53+
#[cfg(feature = "hashbrown")]
54+
pub use self::hashbrown::{HashMap, HashSet, hash_map};
55+
}

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ use ln::functional_test_utils::*;
4141
use util::test_utils;
4242

4343
use prelude::*;
44-
use std::collections::HashMap;
4544
use std::sync::{Arc, Mutex};
4645

4746
// If persister_fail is true, we have the persister return a PermanentFailure

lightning/src/ln/channelmanager.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ use util::errors::APIError;
6464
use prelude::*;
6565
use core::{cmp, mem};
6666
use core::cell::RefCell;
67-
use std::collections::{HashMap, hash_map, HashSet};
6867
use std::io::{Cursor, Read};
6968
use std::sync::{Arc, Condvar, Mutex, MutexGuard, RwLock, RwLockReadGuard};
7069
use core::sync::atomic::{AtomicUsize, Ordering};

0 commit comments

Comments
 (0)