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