#![cfg_attr(not(feature = "std"), no_std)]
#[macro_export]
macro_rules! setup_imports {
(@reordered $std:meta, $alloc:meta, $futures:meta ) => {
#[allow(unused_imports)]
#[cfg($alloc)]
pub extern crate alloc as alloc_crate;
#[cfg(any($alloc, $std))]
mod alloc {
#[cfg(all(not($std), $alloc))]
pub mod prelude {
pub mod v1 {
pub use super::super::borrow::ToOwned;
pub use super::super::boxed::Box;
pub use super::super::string::String;
pub use super::super::string::ToString;
pub use super::super::vec::Vec;
}
}
#[cfg(all(not($std), $alloc))]
pub use alloc_crate::{
alloc, borrow, boxed, collections, fmt, rc, slice, str,
string, sync, vec, format
};
#[cfg(all($std, not($alloc)))]
pub use std::{
alloc, borrow, boxed, collections, fmt, prelude, rc, slice, str,
string, vec, format,
};
#[cfg(all($std, not($alloc)))]
pub mod sync {
pub use std::sync::{Arc, Weak};
}
#[cfg(all($std, not($alloc), $futures))]
pub use std::task;
}
};
(@reorder
({}, $alloc:tt, $futures:tt)
std: $std:meta,
$( $tail:tt )*
) => {
$crate::setup_imports!(@reorder ({$std}, $alloc, $futures) $($tail)*);
};
(@reorder
($std:tt, {}, $futures:tt)
alloc: $alloc:meta,
$( $tail:tt )*
) => {
$crate::setup_imports!(@reorder ($std, {$alloc}, $futures) $($tail)*);
};
(@reorder
($std:tt, $alloc:tt, {})
futures: $futures:meta,
$( $tail:tt )*
) => {
$crate::setup_imports!(@reorder ($std, $alloc, {$futures}) $($tail)*);
};
(@reorder
({$std:meta}, {$alloc:meta}, {$futures:meta})
) => {
$crate::setup_imports!(@reordered $std, $alloc, $futures);
};
(@reorder
({$std:meta}, {$alloc:meta}, {})
) => {
$crate::setup_imports!(@reordered $std, $alloc, any());
};
($($featname:ident : $cond:meta),* $(,)* ) => {
$crate::setup_imports!(@reorder ({}, {}, {}) $($featname : $cond,)*);
};
}
crate::setup_imports! {
std: feature = "std",
alloc: feature = "alloc",
futures: feature = "futures",
}
#[cfg(any(feature = "alloc", feature = "std"))]
pub use crate::alloc::*;