use lz4_flex::block::DecompressError;
use snafu::Snafu;
use std::env;
use std::sync::LazyLock;
use tibba_error::Error as BaseError;
#[derive(Snafu, Debug)]
pub enum Error {
#[snafu(display("{source}"))]
Zstd { source: std::io::Error },
#[snafu(display("{source}"))]
Lz4Decompress { source: DecompressError },
#[snafu(display("{source}"))]
InvalidHeaderName {
source: axum::http::header::InvalidHeaderName,
},
#[snafu(display("{source}"))]
InvalidHeaderValue {
source: axum::http::header::InvalidHeaderValue,
},
#[snafu(display("{source}"))]
Axum { source: axum::Error },
#[snafu(display("{message}"))]
Invalid { message: String },
#[snafu(display("{source}"))]
Deserialize { source: serde_urlencoded::de::Error },
}
impl From<Error> for BaseError {
fn from(val: Error) -> Self {
let err = match val {
Error::Zstd { source } => BaseError::new(source).with_sub_category("zstd"),
Error::Lz4Decompress { source } => {
BaseError::new(source).with_sub_category("lz4_decompress")
}
Error::InvalidHeaderName { source } => {
BaseError::new(source).with_sub_category("invalid_header_name")
}
Error::InvalidHeaderValue { source } => {
BaseError::new(source).with_sub_category("invalid_header_value")
}
Error::Axum { source } => BaseError::new(source).with_sub_category("axum"),
Error::Invalid { message } => BaseError::new(message).with_sub_category("invalid"),
Error::Deserialize { source } => {
BaseError::new(source).with_sub_category("deserialize")
}
};
err.with_category("util")
}
}
static RUST_ENV: LazyLock<String> =
LazyLock::new(|| env::var("RUST_ENV").unwrap_or_else(|_| "dev".to_string()));
pub fn get_env() -> &'static str {
&RUST_ENV
}
pub fn is_development() -> bool {
get_env() == "dev"
}
pub fn is_test() -> bool {
get_env() == "test"
}
pub fn is_production() -> bool {
get_env() == "production"
}
mod compression;
mod datetime;
mod http;
mod request;
mod response;
mod string;
mod uri;
mod value;
pub use compression::*;
pub use datetime::*;
pub use http::*;
pub use request::*;
pub use response::*;
pub use string::*;
pub use uri::*;
pub use value::*;