beet_net 0.0.3

A very flexible AI behavior library for games and robotics.
use flume::Receiver;
use flume::TryRecvError;


#[extend::ext(name=FlumeReceiverExt)]
pub impl<T> Receiver<T> {
	fn try_recv_all(&mut self) -> anyhow::Result<Vec<T>> {
		let mut vec = Vec::new();
		loop {
			match self.try_recv() {
				Ok(message) => vec.push(message),
				Err(TryRecvError::Empty) => break Ok(vec),
				Err(other) => anyhow::bail!(other),
			}
		}
	}
}
#[extend::ext(name=FlumeReceiverExtFlat)]
pub impl<T> Receiver<Vec<T>> {
	fn try_recv_all_flat(&mut self) -> anyhow::Result<Vec<T>> {
		let mut vec = Vec::new();
		loop {
			match self.try_recv() {
				Ok(message) => vec.extend(message),
				Err(TryRecvError::Empty) => break Ok(vec),
				Err(other) => anyhow::bail!(other),
			}
		}
	}
}