X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Flib.rs;h=3bcd5d72c64e19c3adf89d5c8580016582e2462c;hb=4b5504366b2e0c7e29e8bf4bee5d05445f363c35;hp=9bc158328701562954555286e18b0093ea14084b;hpb=73da722d18af7b510711c405154d81c1c9458942;p=rust-lightning diff --git a/lightning/src/lib.rs b/lightning/src/lib.rs index 9bc15832..3bcd5d72 100644 --- a/lightning/src/lib.rs +++ b/lightning/src/lib.rs @@ -94,7 +94,9 @@ pub use std::io; pub use core2::io; #[cfg(not(feature = "std"))] -mod io_extras { +#[doc(hidden)] +/// IO utilities public only for use by in-crate macros. These should not be used externally +pub mod io_extras { use core2::io::{self, Read, Write}; /// A writer which will move data into the void. @@ -154,6 +156,8 @@ mod io_extras { } #[cfg(feature = "std")] +#[doc(hidden)] +/// IO utilities public only for use by in-crate macros. These should not be used externally mod io_extras { pub fn read_to_end(mut d: D) -> Result, ::std::io::Error> { let mut buf = Vec::new(); @@ -165,113 +169,18 @@ mod io_extras { } mod prelude { - #[cfg(feature = "hashbrown")] - extern crate hashbrown; - #[cfg(feature = "ahash")] - extern crate ahash; + #![allow(unused_imports)] pub use alloc::{vec, vec::Vec, string::String, collections::VecDeque, boxed::Box}; pub use alloc::borrow::ToOwned; pub use alloc::string::ToString; - // For no-std builds, we need to use hashbrown, however, by default, it doesn't randomize the - // hashing and is vulnerable to HashDoS attacks. Thus, when not fuzzing, we use its default - // ahash hashing algorithm but randomize, opting to not randomize when fuzzing to avoid false - // positive branch coverage. - - #[cfg(not(feature = "hashbrown"))] - mod std_hashtables { - pub(crate) use std::collections::{HashMap, HashSet, hash_map}; - - pub(crate) type OccupiedHashMapEntry<'a, K, V> = - std::collections::hash_map::OccupiedEntry<'a, K, V>; - pub(crate) type VacantHashMapEntry<'a, K, V> = - std::collections::hash_map::VacantEntry<'a, K, V>; - } - #[cfg(not(feature = "hashbrown"))] - pub(crate) use std_hashtables::*; - - #[cfg(feature = "hashbrown")] - pub(crate) use self::hashbrown::hash_map; - - #[cfg(all(feature = "hashbrown", fuzzing))] - mod nonrandomized_hashbrown { - pub(crate) use hashbrown::{HashMap, HashSet}; - - pub(crate) type OccupiedHashMapEntry<'a, K, V> = - hashbrown::hash_map::OccupiedEntry<'a, K, V, hashbrown::hash_map::DefaultHashBuilder>; - pub(crate) type VacantHashMapEntry<'a, K, V> = - hashbrown::hash_map::VacantEntry<'a, K, V, hashbrown::hash_map::DefaultHashBuilder>; - } - #[cfg(all(feature = "hashbrown", fuzzing))] - pub(crate) use nonrandomized_hashbrown::*; - - - #[cfg(all(feature = "hashbrown", not(fuzzing)))] - mod randomized_hashtables { - use super::*; - use ahash::RandomState; - - pub(crate) type HashMap = hashbrown::HashMap; - pub(crate) type HashSet = hashbrown::HashSet; - - pub(crate) type OccupiedHashMapEntry<'a, K, V> = - hashbrown::hash_map::OccupiedEntry<'a, K, V, RandomState>; - pub(crate) type VacantHashMapEntry<'a, K, V> = - hashbrown::hash_map::VacantEntry<'a, K, V, RandomState>; - - pub(crate) fn new_hash_map() -> HashMap { - HashMap::with_hasher(RandomState::new()) - } - pub(crate) fn hash_map_with_capacity(cap: usize) -> HashMap { - HashMap::with_capacity_and_hasher(cap, RandomState::new()) - } - pub(crate) fn hash_map_from_iter>(iter: I) -> HashMap { - let iter = iter.into_iter(); - let min_size = iter.size_hint().0; - let mut res = HashMap::with_capacity_and_hasher(min_size, RandomState::new()); - res.extend(iter); - res - } - - pub(crate) fn new_hash_set() -> HashSet { - HashSet::with_hasher(RandomState::new()) - } - pub(crate) fn hash_set_with_capacity(cap: usize) -> HashSet { - HashSet::with_capacity_and_hasher(cap, RandomState::new()) - } - pub(crate) fn hash_set_from_iter>(iter: I) -> HashSet { - let iter = iter.into_iter(); - let min_size = iter.size_hint().0; - let mut res = HashSet::with_capacity_and_hasher(min_size, RandomState::new()); - res.extend(iter); - res - } - } - - #[cfg(any(not(feature = "hashbrown"), fuzzing))] - mod randomized_hashtables { - use super::*; - - pub(crate) fn new_hash_map() -> HashMap { HashMap::new() } - pub(crate) fn hash_map_with_capacity(cap: usize) -> HashMap { - HashMap::with_capacity(cap) - } - pub(crate) fn hash_map_from_iter>(iter: I) -> HashMap { - HashMap::from_iter(iter) - } - - pub(crate) fn new_hash_set() -> HashSet { HashSet::new() } - pub(crate) fn hash_set_with_capacity(cap: usize) -> HashSet { - HashSet::with_capacity(cap) - } - pub(crate) fn hash_set_from_iter>(iter: I) -> HashSet { - HashSet::from_iter(iter) - } - } + pub use core::convert::{AsMut, AsRef, TryFrom, TryInto}; + pub use core::default::Default; + pub use core::marker::Sized; - pub(crate) use randomized_hashtables::*; + pub(crate) use crate::util::hash_tables::*; } #[cfg(all(not(ldk_bench), feature = "backtrace", feature = "std", test))]