2025-02-07 22:26:32 +07:00
|
|
|
use axum::{serve, Router};
|
|
|
|
|
use std::env;
|
|
|
|
|
use std::{future::Future, net::SocketAddr};
|
|
|
|
|
use tokio::net::TcpListener;
|
|
|
|
|
|
2025-02-25 02:00:19 +07:00
|
|
|
use crate::{redisdb_init, RedisClient};
|
|
|
|
|
use crate::{surrealdb_init, SurrealClient};
|
|
|
|
|
|
2025-02-07 22:26:32 +07:00
|
|
|
pub async fn axum_init<F, Fut>(router_fn: F)
|
|
|
|
|
where
|
2025-02-25 02:00:19 +07:00
|
|
|
F: FnOnce(SurrealClient, RedisClient) -> Fut,
|
2025-02-16 01:09:55 +07:00
|
|
|
Fut: Future<Output = Router>,
|
2025-02-07 22:26:32 +07:00
|
|
|
{
|
2025-02-25 02:00:19 +07:00
|
|
|
let surrealdb = surrealdb_init().await.expect("Failed surrealdb");
|
|
|
|
|
let redisdb = redisdb_init().await.expect("Failed redisdb");
|
|
|
|
|
let router = router_fn(surrealdb, redisdb).await;
|
|
|
|
|
|
2025-02-16 01:09:55 +07:00
|
|
|
let addr = SocketAddr::from((
|
|
|
|
|
[0, 0, 0, 0],
|
|
|
|
|
env::var("PORT")
|
2025-02-25 02:00:19 +07:00
|
|
|
.unwrap_or_else(|_| "3000".to_string())
|
2025-02-16 01:09:55 +07:00
|
|
|
.parse()
|
|
|
|
|
.unwrap(),
|
|
|
|
|
));
|
2025-02-25 02:00:19 +07:00
|
|
|
|
2025-02-16 01:09:55 +07:00
|
|
|
let listener = TcpListener::bind(&addr).await.unwrap();
|
|
|
|
|
println!("Listening on http://{}", addr);
|
2025-02-25 02:00:19 +07:00
|
|
|
|
2025-02-16 01:09:55 +07:00
|
|
|
match serve(listener, router).await {
|
|
|
|
|
Ok(_) => println!("Server stopped gracefully."),
|
|
|
|
|
Err(err) => println!("Server encountered an error: {}", err),
|
|
|
|
|
}
|
2025-02-07 22:26:32 +07:00
|
|
|
}
|