pub use ::join_lazy_fmt::lazy_format;
#[macro_export]
macro_rules! iter {
(
$($input:tt)*
) => ($crate::__munch_iter_args! {
munching[
$($input)*
]
current_elem[]
to_endpoint[]
});
}
#[doc(inline)]
pub use iter;
#[doc(hidden)] #[macro_export]
macro_rules! __munch_iter_args {
(
munching[
for $($rest:tt)*
]
current_elem[
for $($acc_for:tt)*
]
to_endpoint[
$($out:tt)*
]
) => ($crate::__munch_iter_args! {
munching[
$($rest)*
]
current_elem[ for ]
to_endpoint[
$($out)*
[for $($acc_for)*]
[] ]
});
(
munching[
for $($rest:tt)*
]
current_elem $current_elem:tt
to_endpoint[
$($out:tt)*
]
) => ($crate::__munch_iter_args! {
munching[
$($rest)*
]
current_elem[ for ]
to_endpoint[
$($out)*
$current_elem
]
});
(
munching[
if $($rest:tt)*
]
current_elem $current_elem:tt
to_endpoint[
$($out:tt)*
]
) => ($crate::__munch_iter_args! {
munching[
$($rest)*
]
current_elem[ if ]
to_endpoint[
$($out)*
$current_elem
]
});
(
munching[
$current_tt:tt $($rest:tt)*
]
current_elem[
$($current_elem:tt)*
]
to_endpoint $to_endpoint:tt
) => ($crate::__munch_iter_args! {
munching[
$($rest)*
]
current_elem[
$($current_elem)* $current_tt
]
to_endpoint $to_endpoint
});
(
munching[]
current_elem $current_elem:tt
to_endpoint[
$($out:tt)*
]
) => ($crate::__endpoint! {
$($out)*
$current_elem
})
}
#[doc(hidden)] #[macro_export]
macro_rules! __endpoint {
(
$mapped_expr:tt
[for $var:pat in $iterable:expr]
[if $($filter:tt)*]
$($rest:tt)+
) => (
$crate::__::core::iter::Iterator::flat_map(
$crate::__::core::iter::IntoIterator::into_iter(
$iterable
),
move |$var| {
$crate::__::core::iter::Iterator::flatten(
$crate::__::core::iter::IntoIterator::into_iter(
if $($filter)* {
$crate::__::core::option::Option::Some(
$crate::__endpoint!(
$mapped_expr
$($rest)*
)
)
} else {
$crate::__::core::option::Option::None
}
)
)
},
)
);
(
$mapped_expr:tt
[for $var:pat in $iterable:expr]
[/* no filter */]
$($rest:tt)+
) => (
$crate::__::core::iter::Iterator::flat_map(
$crate::__::core::iter::IntoIterator::into_iter(
$iterable
),
move |$var| $crate::__endpoint!($mapped_expr $($rest)*),
)
);
(
[$mapped_expr:expr]
[for $var:pat in $iterable:expr]
[if $($filter:tt)*]
/* no rest */
) => (
$crate::__::core::iter::Iterator::filter_map(
$crate::__::core::iter::IntoIterator::into_iter(
$iterable
),
move |$var| if $($filter)* {
$crate::__::core::option::Option::Some($mapped_expr)
} else {
$crate::__::core::option::Option::None
},
)
);
(
[$mapped_expr:expr]
[for $var:pat in $iterable:expr]
$([/* no filter */])?
/* no rest */
) => (
$crate::__::core::iter::Iterator::map(
$crate::__::core::iter::IntoIterator::into_iter(
$iterable
),
move |$var| $mapped_expr,
)
);
}
#[cfg(feature = "std")]
#[cfg_attr(feature = "better-docs",
doc(cfg(feature = "std")),
)]
#[macro_export]
macro_rules! v {
(
$($e:expr),* $(,)?
) => (
$crate::__::std::vec! { $($e),* }
);
(
$e:expr ; $count:expr
) => (
$crate::__::std::vec! { $e; $count }
);
(
$($otherwise:tt)*
) => (
<
$crate::__::std::vec::Vec<_>
as
$crate::__::core::iter::FromIterator<_>
>::from_iter(
$crate::macros::iter!( $($otherwise)* )
)
);
}
#[cfg(feature = "std")]
#[cfg_attr(feature = "better-docs",
doc(cfg(feature = "std")),
)]
#[doc(inline)]
pub use crate::v as vec;