1
use std::net::{TcpStream, ToSocketAddrs};
2

            
3
use anyhow::Result;
4

            
5
use 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)]
11
pub struct Builder<A>
12
where
13
    A: ToSocketAddrs,
14
{
15
    /// The address to connect to
16
    addr: A,
17
}
18

            
19
impl<A> Builder<A>
20
where
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

            
29
impl<A> RwBuilder for Builder<A>
30
where
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
}