//! `no_std` compatibility // If we depend on `ahash`, use its hasher. #[cfg(feature = "ahash")] pub use ahash::RandomState; // Use the `std` hasher if we don’t depend on `ahash` but do depend on // `std`. #[cfg(all(not(feature = "ahash"), feature = "std"))] pub use std::collections::hash_map::RandomState; // If we depend on neither `ahash` nor `std` then it’s an error. #[cfg(not(any(feature = "ahash", feature = "std")))] compile_error!("weak-table: no_std requires that you enable the `ahash` feature."); // If we depend on `std`, alias `lib` to `std`. #[cfg(feature = "std")] mod lib { extern crate std; pub use std::*; } // Otherwise, we are `no_std`, so alias `lib` to `alloc`. #[cfg(not(feature = "std"))] mod lib { extern crate alloc; pub use alloc::*; } // Stuff from `std`/`alloc` that we use often. pub use lib::{ boxed::Box, rc, slice, string::String, sync, vec::{self, Vec}, }; // Stuff from `core` that we use often: pub use core::{ borrow::Borrow, cmp::max, hash::{BuildHasher, Hash, Hasher}, iter::{self, FromIterator}, fmt::{self, Debug, Formatter}, mem, ops::{self, Deref, Index, IndexMut}, }; // When testing, we need the `eprintln` macro from `std`: #[cfg(test)] extern crate std; #[cfg(test)] pub use std::eprintln;