From 4d018413f8970e6d8653df9191c95f33440f90cf Mon Sep 17 00:00:00 2001
From: _ <_@_>
Date: Sun, 23 Feb 2025 19:28:28 -0600
Subject: [PATCH] refactor

---
 src/client.rs | 45 +++++++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/client.rs b/src/client.rs
index 70865ab..b9ff7d3 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -34,49 +34,54 @@ impl App {
     }
 
     pub(crate) fn poll_run(&mut self, cx: &mut Context<'_>) -> Poll<Result<()>> {
+        match self.step(cx) {
+            Ok(()) => Poll::Pending,
+            Err(err) => Poll::Ready(Err(err)),
+        }
+    }
+
+    fn step(&mut self, cx: &mut Context<'_>) -> Result<()> {
         let mut stream = pin!(&mut self.stream);
         match <_ as futures_sink::Sink<Bytes>>::poll_ready(stream.as_mut(), cx) {
             Poll::Pending => {}
-            Poll::Ready(Err(err)) => {
-                return Poll::Ready(
-                    Err(err).context("Can't check network write half for readiness"),
-                );
-            }
-            Poll::Ready(Ok(())) => {
+            Poll::Ready(result) => {
+                result?;
                 if let Some(frame) = self.client.poll_send() {
-                    if let Err(err) = stream.as_mut().start_send(frame) {
-                        return Poll::Ready(Err(err).context("stream.start_send"));
-                    }
+                    stream
+                        .as_mut()
+                        .start_send(frame)
+                        .context("stream.start_send")?;
                     tracing::debug!("Started send");
                 }
                 match <_ as futures_sink::Sink<Bytes>>::poll_flush(stream.as_mut(), cx) {
                     Poll::Pending => {}
-                    Poll::Ready(Err(err)) => return Poll::Ready(Err(err).context("poll_flush")),
-                    Poll::Ready(Ok(())) => {}
+                    Poll::Ready(result) => {
+                        result.context("poll_flush")?;
+                    }
                 }
             }
         }
 
         match stream.as_mut().poll_next(cx) {
             Poll::Pending => {}
-            Poll::Ready(None) => return Poll::Ready(Err(anyhow!("Server closed cxn"))),
-            Poll::Ready(Some(frame)) => {
+            Poll::Ready(frame_opt) => {
+                let frame = frame_opt.context("Server closed cxn")?;
                 cx.waker().wake_by_ref();
                 let frame = frame.context("network framing decode")?;
-                if let Err(err) = self.client.handle_frame(frame.into()) {
-                    return Poll::Ready(Err(err).context("client.handle_frame"));
-                }
+                self.client
+                    .handle_frame(frame.into())
+                    .context("client.handle_frame")?;
             }
         }
 
         if self.timer.poll_tick(cx).is_ready() {
             cx.waker().wake_by_ref();
-            if let Err(err) = self.client.handle_timeout() {
-                return Poll::Ready(Err(err).context("client.handle_timeout"));
-            }
+            self.client
+                .handle_timeout()
+                .context("client.handle_timeout")?;
         }
 
-        Poll::Pending
+        Ok(())
     }
 }