use bytes::Bytes;
#[non_exhaustive]
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("Disconnected")]
Disconnected,
#[error("Unsupported Insim version: received {0:?}")]
IncompatibleVersion(u8),
#[error("IO error occurred: {0}")]
IO(#[from] std::io::Error),
#[error("Timeout: {0:?}")]
Timeout(String),
#[error("Failed to parse address: {0}")]
AddrParseError(#[from] std::net::AddrParseError),
#[error("Only Mods are permitted")]
VehicleNotAMod,
#[error("Only Standard vehicles are permitted")]
VehicleNotStandard,
#[error("Encode error: {0}")]
Encode(#[from] insim_core::EncodeError),
#[error("Decode error {error} at offset {offset}: {:?}", input.as_ref())]
Decode {
offset: usize,
input: Bytes,
error: insim_core::DecodeError,
},
#[error("Partial decode. Likely invalid packet definition. Decoded {:?}, remaining {:?}", input.as_ref(), remaining.as_ref())]
IncompleteDecode {
input: Bytes,
remaining: Bytes,
},
}
#[cfg(feature = "tokio")]
#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
impl From<tokio::time::error::Elapsed> for Error {
fn from(value: tokio::time::error::Elapsed) -> Self {
Error::Timeout(value.to_string())
}
}