scatter_net/legacy/interaction/methods/
process.rs

1use 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}