confab 0.3.1

Asynchronous line-oriented interactive TCP client
use std::io;
use thiserror::Error;

#[derive(Debug, Error)]
pub(crate) enum IoError {
    #[error(transparent)]
    Interface(#[from] InterfaceError),
    #[error(transparent)]
    Inet(#[from] InetError),
}

#[derive(Debug, Error)]
pub(crate) enum InterfaceError {
    #[error("failed to initialize readline facility")]
    Init(#[source] rustyline_async::ReadlineError),
    #[error("error reading from startup script")]
    ReadScript(#[source] io::Error),
    #[error("error reading input from terminal")]
    ReadLine(#[source] io::Error),
    #[error("error writing output")]
    Write(#[source] io::Error),
}

#[derive(Debug, Error)]
pub(crate) enum InetError {
    #[error("failed to connect to server")]
    Connect(#[source] io::Error),
    #[error("failed to get peer address")]
    PeerAddr(#[source] io::Error),
    #[error("failed to establish TLS connection")]
    Tls(#[from] crate::tls::TlsError),
    #[error("failed to send line to server")]
    Send(#[source] io::Error),
    #[error("failed to receive line from server")]
    Recv(#[source] io::Error),
}