diff options
Diffstat (limited to 'src/client.rs')
| -rw-r--r-- | src/client.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/client.rs b/src/client.rs new file mode 100644 index 0000000..f5ed2f9 --- /dev/null +++ b/src/client.rs @@ -0,0 +1,39 @@ +use tokio::io::{self, AsyncBufRead, AsyncWrite, AsyncWriteExt}; + +use crate::{ + request::{self, Request}, + response::Response, +}; + +#[derive(Debug)] +pub struct Client<R, W> { + reader: R, + writer: W, + buf: Vec<u8>, + line: Vec<u8>, +} + +impl<R, W> Client<R, W> { + pub fn new(reader: R, writer: W) -> Self { + Self { + reader, + writer, + buf: Vec::new(), + line: Vec::new(), + } + } +} + +impl<R: AsyncBufRead + Unpin, W: AsyncWrite + Unpin> Client<R, W> { + pub async fn read_request(&mut self) -> Result<Option<Request>, 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(()) + } +} |
