3 releases
0.1.2 | Oct 5, 2020 |
---|---|
0.1.1 | Oct 5, 2020 |
0.1.0 | Sep 27, 2020 |
#379 in Memory management
50 downloads per month
Used in 6 crates
(4 directly)
8KB
130 lines
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:
[dependencies]
maybe-std = "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:
[features]
alloc = [ "maybe-std/alloc" ] # Remove if the library always requires `alloc`
std = [ "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.
#![no_std]
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 base::prelude::v1::*;
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"))]
:
#[cfg(feature = "std")]
pub const HOME: base::net::Ipv4Addr = base::net::Ipv4Addr::LOCALHOST;
#[cfg(any(feature = "alloc", feature = "std"))]
pub fn empty_string() -> String {
String::new()
}
Accessing unstable functionality
By default, this crate does not export any unstable features of alloc
. These can be enabled via the unstable
feature flag.