1use std::io;
2
3use serde_json;
4use thiserror;
5
6#[derive(thiserror::Error, Debug)]
8#[non_exhaustive]
9pub enum Error {
10 #[error("jsonrpc protocol error: {0}")]
12 Protocol(String),
13 #[error("(de/)serialization error: {0}")]
15 Serialize(serde_json::Error),
16 #[error("input/output socket error: {0}")]
18 Socket(#[from] io::Error),
19 #[error("connection timeout")]
21 Timeout,
22 #[error("command {cmd}({params}) returns error: {error}")]
24 Command {
25 cmd: String,
26 params: String,
27 error: String,
28 },
29 #[error("socket not found: {0}")]
31 SocketNotFound(String),
32 #[error("OpenvSwitch is not running")]
34 OvsNotRunning,
35 #[error("{cmd} returned invalid data ({response}): {error}")]
37 OvsInvalidResponse {
38 cmd: String,
39 response: String,
40 error: String,
41 },
42}
43
44impl From<serde_json::Error> for Error {
45 fn from(error: serde_json::Error) -> Error {
46 use serde_json::error::Category::*;
48 match error.classify() {
49 Io => Error::Socket(error.into()),
50 _ => Error::Serialize(error),
51 }
52 }
53}