diff --git a/license_server/src/main.rs b/license_server/src/main.rs index 8260136..58c2019 100644 --- a/license_server/src/main.rs +++ b/license_server/src/main.rs @@ -5,6 +5,7 @@ use tracing::{error, info}; mod logging; mod products; +mod server_routes; #[tokio::main] async fn main() { @@ -16,4 +17,22 @@ async fn main() { Err(e) => error!("Failed to load products: {}", e), Ok(_) => info!("Products loaded successfully"), } + + let main_route = server_routes::ServerMainRouter::new(); + // 启动服务 + let bind_addr = String::from("0.0.0.0:3000"); + info!("Server listen on [{}]", bind_addr); + let listener = match tokio::net::TcpListener::bind(bind_addr).await { + Ok(listener) => listener, + Err(e) => { + error!("Failed to bind to port 80: {}", e); + return; + } + }; + if axum::serve(listener, main_route.into_make_service()) + .await + .is_err() + { + error!("Failed to start server"); + } } diff --git a/license_server/src/server_routes.rs b/license_server/src/server_routes.rs new file mode 100644 index 0000000..55fe602 --- /dev/null +++ b/license_server/src/server_routes.rs @@ -0,0 +1,50 @@ +use std::ops::Deref; + +use axum::{routing::IntoMakeService, Router}; + +/// 系统服务核心路由控制组件。 +pub struct ServerMainRouter { + main_router: Router, +} + +impl ServerMainRouter { + /// 构建新的系统服务路由组件。 + pub fn new() -> Box { + Box::new(ServerMainRouter { + main_router: Router::new(), + }) + } + + /// 将系统路由转换为可以供绑定使用的服务。 + pub fn into_make_service(self) -> IntoMakeService { + self.main_router.into_make_service() + } + + /// 注册新的子路由进入系统服务路由。 + /// + /// - `route`:要注册的子路由。 + pub fn register(self, route: R) -> Box + where + R: Into, + { + Box::new(ServerMainRouter { + main_router: self.main_router.merge(route), + }) + } + + /// 批量注册子路由进入系统服务路由。 + /// + /// - `routes`:要注册的子路由列表。 + pub fn registers(self, routes: I) -> Box + where + R: Deref, + I: Iterator, + { + let router = routes.into_iter().fold(self.main_router, |router, route| { + router.merge(route.clone()) + }); + Box::new(ServerMainRouter { + main_router: router, + }) + } +}