rastapi 0.1.0

REST API library inspired by python FastAPI/Flask
Documentation
use std::{borrow::Cow, fmt};
#[derive(Debug)]
pub enum ApiError<'a> {
    ClientNotFound(Option<Cow<'a, str>>),
    RequestReadError(Option<Cow<'a, str>>),
    RequestDataNotUTF8(Option<Cow<'a, str>>),
    RequestNotHttp(Option<Cow<'a, str>>),
    InvalidHeader(Option<Cow<'a, str>>),
    ContentNotSupported(Option<Cow<'a, str>>),
    CannotWriteDataToDisk(Option<Cow<'a, str>>),
    RequestBodyNotRead(Option<Cow<'a, str>>),
    InvalidContentLength(Option<Cow<'a, str>>),
    ContentTypeRequired(Option<Cow<'a, str>>),
    MethodNotAllowed(Option<Cow<'a, str>>),
    MethodNotSupported(Option<Cow<'a, str>>),
    ResourceNotFound(Option<Cow<'a, str>>),
    PayloadTooLarge(Option<Cow<'a, str>>),
    RequestTimedout(Option<Cow<'a, str>>),
    ClientDisconnected(Option<Cow<'a, str>>),
}
impl<'a> fmt::Display for ApiError<'a> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            ApiError::ClientNotFound(msg) => {
                if let Some(_msg) = msg {
                    writeln!(f, "{}", _msg)
                } else {
                    writeln!(f, "Client Socket Adress not found in tcp stream.")
                }
            }
            ApiError::RequestDataNotUTF8(msg) => {
                if let Some(_msg) = msg {
                    writeln!(f, "{}", _msg)
                } else {
                    writeln!(f, "Request string data is not UTF-8 complient")
                }
            }
            ApiError::RequestReadError(msg) => {
                if let Some(_msg) = msg {
                    writeln!(f, "{}", _msg)
                } else {
                    writeln!(f, "Couldn't read request.")
                }
            }
            ApiError::RequestNotHttp(msg) => {
                if let Some(_msg) = msg {
                    writeln!(f, "{}", _msg)
                } else {
                    writeln!(f, "Request protocol is not HTTP/1.x")
                }
            }
            ApiError::InvalidHeader(msg) => {
                if let Some(_msg) = msg {
                    writeln!(f, "{}", _msg)
                } else {
                    writeln!(f, "Invalid header value.")
                }
            }
            ApiError::ContentNotSupported(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Content-Type not supported.")
                }
            }
            ApiError::CannotWriteDataToDisk(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Cannot Write data to a file on disk.")
                }
            }
            ApiError::RequestBodyNotRead(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Cannot Read body completly.")
                }
            }
            ApiError::InvalidContentLength(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Invalid content length header.")
                }
            }
            Self::ContentTypeRequired(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Content type required.")
                }
            }
            Self::MethodNotAllowed(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Method Not allowed.")
                }
            }
            Self::ResourceNotFound(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Resource Not found.")
                }
            }
            Self::MethodNotSupported(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Method Not supported.")
                }
            }
            Self::PayloadTooLarge(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Payload Too large.")
                }
            }
            Self::RequestTimedout(msg) => {
                if let Some(err_msg) = msg {
                    write!(f, "{}", err_msg)
                } else {
                    write!(f, "Request read time out reached.")
                }
            }
            Self::ClientDisconnected(msg) => {
                if let Some(_msg) = msg {
                    writeln!(f, "{}", _msg)
                } else {
                    writeln!(f, "Client disconnected prematurely.")
                }
            }
        }
    }
}