1 //! `no_std` compatibility
2 
3 // If we depend on `ahash`, use its hasher.
4 #[cfg(feature = "ahash")]
5 pub use ahash::RandomState;
6 
7 // Use the `std` hasher if we don’t depend on `ahash` but do depend on
8 // `std`.
9 #[cfg(all(not(feature = "ahash"), feature = "std"))]
10 pub use std::collections::hash_map::RandomState;
11 
12 // If we depend on neither `ahash` nor `std` then it’s an error.
13 #[cfg(not(any(feature = "ahash", feature = "std")))]
14 compile_error!("weak-table: no_std requires that you enable the `ahash` feature.");
15 
16 // If we depend on `std`, alias `lib` to `std`.
17 #[cfg(feature = "std")]
18 mod lib {
19     extern crate std;
20     pub use std::*;
21 }
22 
23 // Otherwise, we are `no_std`, so alias `lib` to `alloc`.
24 #[cfg(not(feature = "std"))]
25 mod lib {
26     extern crate alloc;
27     pub use alloc::*;
28 }
29 
30 // Stuff from `std`/`alloc` that we use often.
31 pub use lib::{
32     boxed::Box,
33     rc,
34     slice,
35     string::String,
36     sync,
37     vec::{self, Vec},
38 };
39 
40 // Stuff from `core` that we use often:
41 pub use core::{
42     borrow::Borrow,
43     cmp::max,
44     hash::{BuildHasher, Hash, Hasher},
45     iter::{self, FromIterator},
46     fmt::{self, Debug, Formatter},
47     mem,
48     ops::{self, Deref, Index, IndexMut},
49 };
50 
51 // When testing, we need the `eprintln` macro from `std`:
52 #[cfg(test)]
53 extern crate std;
54 
55 #[cfg(test)]
56 pub use std::eprintln;
57