Skip to content

Commit 1100c84

Browse files
committed
Load directory initialization file
1 parent 74df339 commit 1100c84

File tree

14 files changed

+184
-0
lines changed

14 files changed

+184
-0
lines changed

.env

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
APP_ENV=dev

api/Cargo.toml

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[package]
2+
name = "api"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
tokio = { version = "1.41.1", features = ["full"] }
8+
axum = "0.8.0-alpha.1"
9+
tower = "0.5.1"
10+
serde = { version = "1.0", features = ["derive"] }
11+
serde_json = "1.0"
12+
13+
# config
14+
config = "0.14.1"
15+
dotenv = "0.15.0"

api/src/config.rs

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
use config::{Config, File};
2+
use std::env;
3+
use serde::Deserialize;
4+
use dotenv::dotenv;
5+
6+
#[derive(Debug, Deserialize)]
7+
pub struct ServerConfig {
8+
pub host: String,
9+
pub port: u16,
10+
}
11+
12+
#[derive(Debug, Deserialize)]
13+
pub struct DatabaseConfig {
14+
pub url: String,
15+
pub pool_size: u32,
16+
}
17+
18+
#[derive(Debug, Deserialize)]
19+
pub struct AppConfig {
20+
pub server: ServerConfig,
21+
pub database: DatabaseConfig,
22+
}
23+
24+
pub fn load_config() -> AppConfig {
25+
// load .env file
26+
dotenv().ok();
27+
let current_dir = env::current_dir().unwrap();
28+
let environment = env::var("APP_ENV").unwrap_or_else(|_| "dev".to_string());
29+
println!("Environment: {}", environment);
30+
31+
let mut config = Config::builder();
32+
let config_file = format!("api/src/resources/application-{}.toml", environment);
33+
println!("Config file path: {:?}", config_file);
34+
35+
// load config file from resources
36+
config = config.add_source(File::with_name(&config_file));
37+
config.build().unwrap().try_deserialize::<AppConfig>().unwrap()
38+
}

api/src/main.rs

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
mod config;
2+
3+
use axum::{Router, routing};
4+
use tokio;
5+
use config::load_config;
6+
7+
/// # Eairp api v2 Application Main function
8+
/// @author James Zow
9+
///
10+
/// @date 2024-12-02
11+
///
12+
/// @description
13+
/// This is the main function of the project, which is used to start the web server.
14+
///
15+
#[tokio::main]
16+
async fn main() {
17+
// 加载配置
18+
let config = load_config();
19+
20+
// 初始化应用路由
21+
let app = Router::new();
22+
23+
// 输出服务器启动信息
24+
println!("Server is running on http://{}:{}", config.server.host, config.server.port);
25+
26+
// run server
27+
let listener = tokio::net::TcpListener::bind(&format!(
28+
"{}:{}", config.server.host, config.server.port))
29+
.await
30+
.unwrap();
31+
32+
axum::serve(listener, app).await.unwrap();
33+
}
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[server]
2+
host = "127.0.0.1"
3+
port = 8080
4+
5+
[database]
6+
url = "mysql://root:123456@localhost:3306/eairp"
7+
pool_size = 10

api/src/resources/application-test.toml

Whitespace-only changes.

dao/Cargo.toml

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "dao"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
tokio = { version = "1.41.1", features = ["full"] }
8+
serde = { version = "1.0", features = ["derive"] }
9+
sqlx = { version = "0.8.2", features = ["mysql", "runtime-tokio-native-tls"] }
10+
serde_json = "1.0"

dao/src/lib.rs

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
pub fn add(left: u64, right: u64) -> u64 {
2+
left + right
3+
}
4+
5+
#[cfg(test)]
6+
mod tests {
7+
use super::*;
8+
9+
#[test]
10+
fn it_works() {
11+
let result = add(2, 2);
12+
assert_eq!(result, 4);
13+
}
14+
}

domain/Cargo.toml

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[package]
2+
name = "domain"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]

domain/src/lib.rs

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
pub fn add(left: u64, right: u64) -> u64 {
2+
left + right
3+
}
4+
5+
#[cfg(test)]
6+
mod tests {
7+
use super::*;
8+
9+
#[test]
10+
fn it_works() {
11+
let result = add(2, 2);
12+
assert_eq!(result, 4);
13+
}
14+
}

service/Cargo.toml

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[package]
2+
name = "service"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
tokio = { version = "1", features = ["full"] }
8+
serde = { version = "1.0", features = ["derive"] }
9+
serde_json = "1.0"
10+
# 引入模块
11+
domain = { path = "../domain" }
12+
dao = { path = "../dao" }

service/src/lib.rs

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
pub fn add(left: u64, right: u64) -> u64 {
2+
left + right
3+
}
4+
5+
#[cfg(test)]
6+
mod tests {
7+
use super::*;
8+
9+
#[test]
10+
fn it_works() {
11+
let result = add(2, 2);
12+
assert_eq!(result, 4);
13+
}
14+
}

utils/Cargo.toml

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[package]
2+
name = "utils"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]

utils/src/lib.rs

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
pub fn add(left: u64, right: u64) -> u64 {
2+
left + right
3+
}
4+
5+
#[cfg(test)]
6+
mod tests {
7+
use super::*;
8+
9+
#[test]
10+
fn it_works() {
11+
let result = add(2, 2);
12+
assert_eq!(result, 4);
13+
}
14+
}

0 commit comments

Comments
 (0)