1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq)]
6pub enum Error {
7 Http(String),
9 Status { status: u16, message: String },
12 Decode(String),
14 DuplicateQuestion(String),
16 Invalid { id: String, why: String },
18 MissingAnswer(String),
20 WrongType { id: String, expected: &'static str, found: String },
22 MissingProbability { id: String, label: String },
25}
26
27pub type Result<T> = std::result::Result<T, Error>;
28
29impl fmt::Display for Error {
30 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31 match self {
32 Error::Http(message) => write!(f, "HTTP error: {message}"),
33 Error::Status { status, message } => write!(f, "decisions endpoint returned HTTP {status}: {message}"),
34 Error::Decode(message) => write!(f, "invalid message: {message}"),
35 Error::DuplicateQuestion(id) => write!(f, "question `{id}` is asked twice"),
36 Error::Invalid { id, why } => write!(f, "question `{id}`: {why}"),
37 Error::MissingAnswer(id) => write!(f, "no answer for question `{id}`"),
38 Error::WrongType { id, expected, found } => write!(f, "question `{id}` is a {found}, not a {expected}"),
39 Error::MissingProbability { id, label } => write!(f, "question `{id}` gives no probability for `{label}`"),
40 }
41 }
42}
43
44impl std::error::Error for Error {}