use std::time::Duration;
#[derive(thiserror::Error, Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum WireError {
#[error("wire stream closed")]
StreamClosed,
#[error("wire I/O timed out after {0:?}")]
Timeout(Duration),
#[error("failed to spawn process: {0}")]
SpawnFailed(String),
#[error("json parse error: {0}")]
JsonParse(String),
#[error("json serialization error: {0}")]
JsonSerialize(String),
#[error("wire request failed: {message} (code: {code})")]
RequestFailed {
code: i32,
message: String,
},
#[error("unexpected response id: expected {expected}, got {got}")]
UnexpectedResponseId {
expected: String,
got: String,
},
#[error("method not found: {0}")]
MethodNotFound(String),
#[error("unknown wire message type: {0}")]
UnknownMessageType(String),
#[error("wire message payload must be a json object")]
InvalidPayloadType,
#[error("I/O error: {0}")]
Io(String),
#[error("internal error: {0}")]
Internal(String),
}
impl From<std::io::Error> for WireError {
fn from(err: std::io::Error) -> Self {
WireError::Io(err.to_string())
}
}
impl From<serde_json::Error> for WireError {
fn from(err: serde_json::Error) -> Self {
if err.is_io() {
WireError::Io(err.to_string())
} else {
WireError::JsonParse(err.to_string())
}
}
}