rw_builder/
tcp_stream.rs

1use std::net::{TcpStream, ToSocketAddrs};
2
3use anyhow::Result;
4
5use crate::RwBuilder;
6
7/// Type for building readers and writers on top of a connected TCP socket.
8/// It is itself an `RwBuilder`, but can't be created through one.
9/// This is why we call it a source.
10#[derive(Debug)]
11pub struct Builder<A>
12where
13    A: ToSocketAddrs,
14{
15    /// The address to connect to
16    addr: A,
17}
18
19impl<A> Builder<A>
20where
21    A: ToSocketAddrs,
22{
23    /// Factory function to create a builder holding on to a socket address
24    pub const fn new(addr: A) -> Self {
25        Self { addr }
26    }
27}
28
29impl<A> RwBuilder for Builder<A>
30where
31    A: ToSocketAddrs,
32{
33    type Reader = TcpStream;
34    type Writer = TcpStream;
35
36    fn reader(&self) -> Result<Self::Reader> {
37        let stream = TcpStream::connect(&self.addr)?;
38        Ok(stream)
39    }
40
41    fn writer(&self) -> Result<Self::Writer> {
42        let stream = TcpStream::connect(&self.addr)?;
43        Ok(stream)
44    }
45}