rust_webx_core/mode.rs
1//! Application mode: Development vs Production.
2//!
3//! Controls framework behavior such as startup banner verbosity
4//! and built-in request logging.
5//!
6//! 环境识别遵循 ASP.NET Core 约定:
7//! 1. 环境变量 `APP_ENV`(不区分大小写)显式指定,取值 `Production`/`Prod` 或
8//! `Development`/`Dev`;
9//! 2. 未设置时默认 `Development`。
10//!
11//! 框架据此自动加载 `appsettings.{Environment}.json` overlay。
12
13/// Controls how the framework behaves at startup and at runtime.
14#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
15pub enum AppMode {
16 /// Full startup banner, per-request console logging, verbose diagnostics.
17 #[default]
18 Development,
19 /// Minimal one-line startup message, no framework-initiated console logging.
20 Production,
21}
22
23impl AppMode {
24 /// 环境模式对应的 overlay 文件名,如 `appsettings.Development.json`。
25 pub fn overlay_filename(&self) -> &'static str {
26 match self {
27 AppMode::Development => "appsettings.Development.json",
28 AppMode::Production => "appsettings.Production.json",
29 }
30 }
31
32 /// 从环境变量 `APP_ENV` 解析运行模式;未设置或值非法时返回 `Development`。
33 ///
34 /// 接受(不区分大小写):`Production` / `Prod` / `Development` / `Dev`。
35 pub fn from_env() -> Self {
36 Self::from_env_var("APP_ENV")
37 }
38
39 /// 从指定环境变量名解析运行模式。
40 pub fn from_env_var(var: &str) -> Self {
41 match std::env::var(var) {
42 Ok(raw) => match raw.trim().to_lowercase().as_str() {
43 "production" | "prod" => AppMode::Production,
44 "development" | "dev" => AppMode::Development,
45 _ => {
46 eprintln!(
47 "[AppMode] Invalid {}='{}'; expected Production/Development. Falling back to Development.",
48 var, raw
49 );
50 AppMode::Development
51 }
52 },
53 Err(_) => AppMode::Development,
54 }
55 }
56}