//! Rust User API 服务器主程序 use std::net::SocketAddr; use std::sync::Arc; use tracing_subscriber; use rust_user_api::{ config::Config, routes::create_routes, storage::{memory::MemoryUserStore, database::DatabaseUserStore, UserStore}, }; #[tokio::main] async fn main() { // 初始化日志 tracing_subscriber::fmt::init(); // 加载配置 let config = Config::from_env(); // 根据配置创建存储实例 let store: Arc = if let Some(database_url) = &config.database_url { println!("🗄️ 使用 SQLite 数据库存储: {}", database_url); // 创建数据库存储 let db_store = DatabaseUserStore::from_url(database_url) .await .expect("无法连接到数据库"); Arc::new(db_store) } else { println!("💾 使用内存存储"); Arc::new(MemoryUserStore::new()) }; // 创建路由 let app = create_routes(store); // 启动服务器 let addr: SocketAddr = config.server_address().parse() .expect("无效的服务器地址"); println!("🚀 服务器启动在 http://{}", addr); println!("📚 API 文档: http://{}/", addr); println!("❤️ 健康检查: http://{}/health", addr); let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); axum::serve(listener, app).await.unwrap(); }