#![doc = include_str!("../README.md")]
#![no_std]
mod convert;
pub use convert::{infer_into, InferInto, StandardConverters};
pub use default_constructor_macros::meta_default_constructor;
pub mod effects {
extern crate alloc;
#[cfg(feature = "std")]
pub fn boxed<T>(item: T) -> alloc::boxed::Box<T> {
alloc::boxed::Box::new(item)
}
#[cfg(feature = "std")]
pub fn rc<T>(item: T) -> alloc::rc::Rc<T> {
alloc::rc::Rc::new(item)
}
#[cfg(feature = "std")]
pub fn arc<T>(item: T) -> alloc::sync::Arc<T> {
alloc::sync::Arc::new(item)
}
#[cfg(feature = "std")]
pub fn cow<T: Clone>(item: T) -> alloc::borrow::Cow<'static, T> {
alloc::borrow::Cow::Owned(item)
}
pub fn some<T>(item: T) -> Option<T> {
Option::Some(item)
}
pub fn arr<T, I: IntoIterator<Item = T> + FromIterator<T>, const N: usize>(item: [T; N]) -> I {
item.into_iter().collect()
}
}
#[macro_export]
macro_rules! construct {
($($tt: tt)*) => {
{
use $crate::effects::*;
$crate::meta_default_constructor! {
[::std::convert::Into::into]
$($tt)*
}
}
};
}
#[macro_export]
macro_rules! infer_construct {
($($tt: tt)*) => {
{
use $crate::effects::*;
$crate::meta_default_constructor! {
[$crate::infer_into]
$($tt)*
}
}
};
}