protoflow_core/
message_receiver.rs

1// This is free and unencumbered software released into the public domain.
2
3//! Common methods for receiving messages.
4
5use crate::{prelude::ToString, Message, PortError, PortResult};
6
7pub trait MessageReceiver<T: Message> {
8    /// Receives a message, blocking until one is available.
9    ///
10    /// Returns `Ok(Some(message))` if a message was received.
11    /// Returns `Ok(None)` if the port is closed or disconnected.
12    /// Returns `Err(PortError)` if an error occurs.
13    fn recv(&self) -> PortResult<Option<T>> {
14        Err(PortError::Other("not implemented".to_string()))
15    }
16
17    /// Tries to receive a message, returning immediately.
18    ///
19    /// Returns `Ok(Some(message))` if a message was received.
20    /// Returns `Ok(None)` if no message was immediately available.
21    /// Returns `Err(PortError::Disconnected)` if the port is disconnected.
22    /// Returns `Err(PortError::Closed)` if the port is closed.
23    /// Returns `Err(PortError)` if another error occurs.
24    fn try_recv(&self) -> PortResult<Option<T>> {
25        Err(PortError::Other("not implemented".to_string()))
26    }
27}