Maybe-std
A rust crate that helps writing libraries that work without alloc and/or std but can provide extra functionality if they are available. Writing such libraries involves some namespace-juggling which this crate takes care of. It exports all the items from core, alloc or std, depending on which features are enabled.
Usage
Depend on this crate by adding it to your Cargo.toml file:
[]
= "0.1.0"
# If the library always requires the `alloc` crate, directly enable the feature:
# maybe-std = { version = "0.1.0", features = [ "alloc" ] }
Define the feature flags that control whether your library uses alloc and/or std, and forward them to the maybe_std crate:
[]
= [ "maybe-std/alloc" ] # Remove if the library always requires `alloc`
= [ "maybe-std/std" ]
In the crate root, disable the standard library and import this crate - optionally rename it to something short to keep things more readable.
extern crate maybe_std as base;
// `base` contains the same items as `core`, `alloc` or `std`, depending on
// the enabled features.
In all files, import the prelude:
use *;
When using std functionality, gate it with #[cfg(feature = "std")], and when using alloc functionality that should be available even without std, gate it with #[cfg(any(feature = "alloc", feature = "std"))]:
pub const HOME: Ipv4Addr = LOCALHOST;
Accessing unstable functionality
By default, this crate does not export any unstable features of alloc. These can be enabled via the unstable feature flag.