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}