#![allow(clippy::needless_doctest_main)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![cfg_attr(
feature = "nightly",
feature(allocator_api, fundamental, with_negative_coherence, box_into_inner)
)]
#![deny(missing_docs)]
#![allow(clippy::derivable_impls)]
pub use crate::alloc::Allocator;
mod alloc;
#[cfg(feature = "nightly")]
pub mod boxed;
pub mod collections;
#[cfg(feature = "nightly")]
pub mod vec;
pub mod maybe {
#[cfg(not(feature = "nightly"))]
pub use std::{boxed, vec};
#[cfg(feature = "nightly")]
pub use crate::{boxed, vec};
}
#[derive(Clone, Copy)]
pub struct FastAlloc {
#[cfg(feature = "scoped")]
alloc: Option<&'static Allocator>,
}
impl FastAlloc {
pub const fn global() -> Self {
Self {
#[cfg(feature = "scoped")]
alloc: None,
}
}
}
#[cfg(feature = "nightly")]
#[macro_export]
macro_rules! nightly_only {
(
$($item:item)*
) => {
$(
#[cfg_attr(docsrs, doc(cfg(feature = "nightly")))]
$item
)*
};
}
#[cfg(not(feature = "nightly"))]
#[macro_export]
macro_rules! nightly_only {
(
$($item:item)*
) => {};
}
#[macro_export]
macro_rules! Type {
(Box<$($tt:tt)*>) => {
#[cfg(feature = "nightly")]
$crate::boxed::Box<$crate::Type!($($tt)*)>
#[cfg(not(feature = "nightly"))]
std::boxed::Box<$crate::Type!($($tt)*)>
};
(Vec<$($tt:tt)*>) => {
#[cfg(feature = "nightly")]
$crate::vec::Vec<$crate::Type!($($tt)*)>
#[cfg(not(feature = "nightly"))]
std::vec::Vec<$crate::Type!($($tt)*)>
};
($t:ty) => {
$t
};
}