scatter_net/legacy/interaction/methods/
process.rs1use n0_future::StreamExt;
2
3use crate::Interaction;
4
5impl Interaction {
6 pub async fn process(mut self) -> Result<(), InteractionProcessError> {
7 loop {
8 match self.next().await {
9 Some(Ok(packet)) => {
10 if let Some(response) = packet.process(self.peer.clone()).await? {
11 self.send_packet(response).await?;
12 }
13 }
14 Some(Err(err)) => return Err(err)?,
15 None => return Ok(()),
16 }
17 }
18 }
19}
20
21#[derive(thiserror::Error, Debug)]
22pub enum InteractionProcessError {
23 #[error("Processing packet failed: {0}")]
24 PacketProcessError(#[from] crate::PacketProcessError),
25 #[error("Reading packet failed: {0}")]
26 ReadPacket(#[from] crate::InteractionReadPacketError),
27 #[error("Sending reply failed: {0}")]
28 SendReply(#[from] super::InteractionSendPacketError),
29}