use core::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EmitError {
Closed,
WouldBlock,
}
impl fmt::Display for EmitError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Closed => f.write_str("downstream closed"),
Self::WouldBlock => f.write_str("downstream would block"),
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for EmitError {}
pub trait Emit {
type Item;
fn emit(&mut self, item: Self::Item) -> Result<(), EmitError>;
}
#[cfg(test)]
mod tests {
use super::*;
use alloc::string::ToString;
#[test]
fn emit_error_display() {
assert_eq!(EmitError::Closed.to_string(), "downstream closed");
assert_eq!(EmitError::WouldBlock.to_string(), "downstream would block");
}
}