use std::fmt::{Debug, Display};
pub use crate::header::StatusCode;
use crate::request::{DeserializeError, SerializeError};
use serde::Serialize;
pub trait ApiError: Debug + Display + Serialize {
fn from_error(e: Error) -> Self;
fn status_code(&self) -> StatusCode;
}
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("Headers missing: {0:?}")]
HeadersMissing(&'static [&'static str]),
#[error("Deserialize error: {0}")]
Deserialize(DeserializeError),
#[error("Serialize error: {0}")]
Serialize(SerializeError),
#[error("Extraction error: {0}")]
ExtractionError(Box<dyn std::error::Error + Send + Sync>),
#[error("Internal error: {0}")]
Chuchi(crate::Error),
}