1use lz4_flex::block::DecompressError;
16use snafu::Snafu;
17use std::env;
18use std::sync::LazyLock;
19use tibba_error::Error as BaseError;
20
21#[derive(Snafu, Debug)]
22pub enum Error {
23 #[snafu(display("{source}"))]
24 Zstd { source: std::io::Error },
25 #[snafu(display("{source}"))]
26 Lz4Decompress { source: DecompressError },
27 #[snafu(display("{source}"))]
28 InvalidHeaderName {
29 source: axum::http::header::InvalidHeaderName,
30 },
31 #[snafu(display("{source}"))]
32 InvalidHeaderValue {
33 source: axum::http::header::InvalidHeaderValue,
34 },
35 #[snafu(display("{source}"))]
36 Axum { source: axum::Error },
37 #[snafu(display("{message}"))]
38 Invalid { message: String },
39 #[snafu(display("{source}"))]
40 Deserialize { source: serde_urlencoded::de::Error },
41}
42
43impl From<Error> for BaseError {
44 fn from(val: Error) -> Self {
45 let message = val.to_string();
46 let sub_category = match &val {
47 Error::Zstd { .. } => "zstd",
48 Error::Lz4Decompress { .. } => "lz4_decompress",
49 Error::InvalidHeaderName { .. } => "invalid_header_name",
50 Error::InvalidHeaderValue { .. } => "invalid_header_value",
51 Error::Axum { .. } => "axum",
52 Error::Invalid { .. } => "invalid",
53 Error::Deserialize { .. } => "deserialize",
54 };
55 BaseError::new(message)
56 .with_category("util")
57 .with_sub_category(sub_category)
58 }
59}
60
61static RUST_ENV: LazyLock<String> =
62 LazyLock::new(|| env::var("RUST_ENV").unwrap_or_else(|_| "dev".to_string()));
63
64pub fn get_env() -> &'static str {
65 &RUST_ENV
66}
67
68pub fn is_development() -> bool {
71 get_env() == "dev"
72}
73
74pub fn is_test() -> bool {
76 get_env() == "test"
77}
78
79pub fn is_production() -> bool {
81 get_env() == "production"
82}
83
84mod compression;
85mod datetime;
86mod http;
87mod request;
88mod response;
89mod string;
90mod uri;
91mod value;
92
93pub use compression::*;
94pub use datetime::*;
95pub use http::*;
96pub use request::*;
97pub use response::*;
98pub use string::*;
99pub use uri::*;
100pub use value::*;