use tokio::io::{self, AsyncBufRead, AsyncWrite, AsyncWriteExt}; use crate::{ request::{self, Request}, response::Response, }; #[derive(Debug)] pub struct Client { reader: R, writer: W, buf: Vec, line: Vec, } impl Client { pub fn new(reader: R, writer: W) -> Self { Self { reader, writer, buf: Vec::new(), line: Vec::new(), } } } impl Client { pub async fn read_request(&mut self) -> Result, request::Error> { Request::parse(&mut self.reader, &mut self.buf, &mut self.line).await } pub async fn send_response(&mut self, response: Response) -> Result<(), io::Error> { response.serialize(&mut self.writer).await?; self.writer.flush().await?; Ok(()) } }