#![deny(
missing_debug_implementations,
missing_docs,
clippy::all,
clippy::cargo
)]
mod scope;
mod stream_impl;
mod try_stream_impl;
mod yielder;
pub use self::stream_impl::AsyncStream;
pub use self::try_stream_impl::AsyncTryStream;
pub use self::yielder::Yielder;
pub(crate) fn next_id() -> u64 {
use std::sync::atomic::{AtomicU64, Ordering};
static ID: AtomicU64 = AtomicU64::new(1);
ID.fetch_add(1, Ordering::Relaxed)
}
#[macro_export]
macro_rules! stream {
{$($block:tt)*} => {
$crate::AsyncStream::new(|mut __y| async move{
#[allow(unused_macros)]
macro_rules! yield_ {
($v:expr) => {
__y.yield_($v).await
};
}
$($block)*
})
}
}
#[macro_export]
macro_rules! try_stream{
{$($block:tt)*} => {
$crate::AsyncTryStream::new(|mut __y| async move{
macro_rules! yield_ {
($v:expr) => {
__y.yield_ok($v).await
};
}
$($block)*
})
}
}