1use std::fmt::{Debug, Display};
2
3pub use fire::header::StatusCode;
4
5use representation::request::{DeserializeError, SerializeError};
6use serde::Serialize;
7
8pub trait ApiError: Debug + Display + Serialize {
26 fn from_error(e: Error) -> Self;
27
28 fn status_code(&self) -> StatusCode;
29}
30
31#[derive(Debug, thiserror::Error)]
32#[non_exhaustive]
33pub enum Error {
34 #[error("Headers missing: {0:?}")]
38 HeadersMissing(&'static [&'static str]),
39
40 #[error("Deserialize error: {0}")]
42 Deserialize(DeserializeError),
43
44 #[error("Serialize error: {0}")]
46 Serialize(SerializeError),
47
48 #[error("Extraction error: {0}")]
49 ExtractionError(Box<dyn std::error::Error + Send + Sync>),
50
51 #[error("Internal error: {0}")]
53 Fire(fire::Error),
54}