use std::io;
use thiserror::Error;
use tokio_util::codec::LinesCodecError;
use super::parsers::ParseError;
#[derive(Debug, Error)]
pub enum TorClientError {
#[error("Failed to read/write line to socket. The maximum line length was exceeded.")]
MaxLineLengthExceeded,
#[error("IO Error: {0}")]
Io(#[from] io::Error),
#[error("Command failed: {0}")]
TorCommandFailed(String),
#[error("Tor control port connection unexpectedly closed")]
UnexpectedEof,
#[error("Parse error: {0}")]
ParseError(#[from] ParseError),
#[error("The server returned no response")]
ServerNoResponse,
#[error("The server returned an invalid response: {0}")]
ServerInvalidResponse(String),
#[error("Server did not return a ServiceID for ADD_ONION command")]
AddOnionNoServiceId,
#[error("The given service id was invalid")]
InvalidServiceId,
#[error("Onion address is exists")]
OnionAddressCollision,
#[error("Response returned an no value for key")]
KeyValueNoValue,
#[error("The command sender disconnected")]
CommandSenderDisconnected,
}
impl From<LinesCodecError> for TorClientError {
fn from(err: LinesCodecError) -> Self {
use LinesCodecError::{Io, MaxLineLengthExceeded};
match err {
MaxLineLengthExceeded => TorClientError::MaxLineLengthExceeded,
Io(err) => TorClientError::Io(err),
}
}
}