feat: implement surrealdb and redis
This commit is contained in:
+11
-3
@@ -3,21 +3,29 @@ use std::env;
|
||||
use std::{future::Future, net::SocketAddr};
|
||||
use tokio::net::TcpListener;
|
||||
|
||||
use crate::{redisdb_init, RedisClient};
|
||||
use crate::{surrealdb_init, SurrealClient};
|
||||
|
||||
pub async fn axum_init<F, Fut>(router_fn: F)
|
||||
where
|
||||
F: Fn() -> Fut,
|
||||
F: FnOnce(SurrealClient, RedisClient) -> Fut,
|
||||
Fut: Future<Output = Router>,
|
||||
{
|
||||
let router = router_fn().await;
|
||||
let surrealdb = surrealdb_init().await.expect("Failed surrealdb");
|
||||
let redisdb = redisdb_init().await.expect("Failed redisdb");
|
||||
let router = router_fn(surrealdb, redisdb).await;
|
||||
|
||||
let addr = SocketAddr::from((
|
||||
[0, 0, 0, 0],
|
||||
env::var("PORT")
|
||||
.unwrap_or("3000".to_string())
|
||||
.unwrap_or_else(|_| "3000".to_string())
|
||||
.parse()
|
||||
.unwrap(),
|
||||
));
|
||||
|
||||
let listener = TcpListener::bind(&addr).await.unwrap();
|
||||
println!("Listening on http://{}", addr);
|
||||
|
||||
match serve(listener, router).await {
|
||||
Ok(_) => println!("Server stopped gracefully."),
|
||||
Err(err) => println!("Server encountered an error: {}", err),
|
||||
|
||||
@@ -4,6 +4,7 @@ pub mod jsonwebtoken;
|
||||
pub mod lettre;
|
||||
pub mod redis;
|
||||
pub mod seaorm;
|
||||
pub mod surrealdb;
|
||||
|
||||
pub use argon::*;
|
||||
pub use axum::*;
|
||||
@@ -11,3 +12,4 @@ pub use jsonwebtoken::*;
|
||||
pub use lettre::*;
|
||||
pub use redis::*;
|
||||
pub use seaorm::*;
|
||||
pub use surrealdb::*;
|
||||
|
||||
+7
-11
@@ -1,20 +1,16 @@
|
||||
use redis::Client;
|
||||
use redis::RedisResult;
|
||||
use std::env;
|
||||
|
||||
use redis::Client;
|
||||
|
||||
pub fn db_redis() -> redis::Connection {
|
||||
let host_name = env::var("REDIS_HOSTNAME").unwrap_or("localhost".to_string());
|
||||
|
||||
pub async fn redisdb_init() -> RedisResult<Client> {
|
||||
let host_name =
|
||||
env::var("REDIS_HOSTNAME").unwrap_or_else(|_| "localhost".to_string());
|
||||
let uri_scheme = if env::var("IS_TLS").is_ok() {
|
||||
"rediss"
|
||||
} else {
|
||||
"redis"
|
||||
};
|
||||
|
||||
let url = format!("{}://{}", uri_scheme, host_name);
|
||||
|
||||
Client::open(url)
|
||||
.expect("Invalid connection URL")
|
||||
.get_connection()
|
||||
.expect("Failed to connect to Redis")
|
||||
let client = Client::open(url)?;
|
||||
Ok(client)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
use surrealdb::engine::remote::ws::{Client, Ws};
|
||||
use surrealdb::{Result, Surreal};
|
||||
|
||||
use crate::SurrealClient;
|
||||
|
||||
pub async fn surrealdb_init() -> Result<SurrealClient> {
|
||||
let db = Surreal::<Client>::init();
|
||||
db.connect::<Ws>("ws://localhost:8000").await?;
|
||||
db.use_ns("test").use_db("test").await?;
|
||||
Ok(db)
|
||||
}
|
||||
Reference in New Issue
Block a user