Crates.io | maybe-std |
lib.rs | maybe-std |
version | 0.1.2 |
source | src |
created_at | 2020-09-27 22:27:45.915915 |
updated_at | 2020-10-05 22:06:33.233763 |
description | Helper crate for writing rust libraries with an optional dependency on the standard library. |
homepage | |
repository | https://github.com/AljoschaMeyer/maybe-std |
max_upload_size | |
id | 293538 |
size | 14,449 |
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.
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()
}
By default, this crate does not export any unstable features of alloc
. These can be enabled via the unstable
feature flag.