novax_sqlx_postgres/
lib.rs1use sqlx::postgres::PgPoolOptions;
2use sqlx::PgPool;
3
4pub struct PostgresConn {
5 port: i16,
6 user: String,
7 pwd: String,
8 host: String,
9 db: String
10}
11
12impl PostgresConn {
16 pub fn new(param: (String, String, String, String, i16)) -> Self {
25 let (user, pwd, host, db, port) = param;
26 Self {
27 port, user, pwd, host, db
28 }
29 }
30 fn to_sql(&self) -> String {
31 format!("postgres://{}:{}@{}:{}/{}",
32 self.user, self.pwd, self.host, self.port, self.db)
33 }
34}
35
36pub async fn create_connection(my_conn: PostgresConn, num_cn: u32) -> Result<PgPool, sqlx::Error> {
37 let database_url = my_conn.to_sql();
38 PgPoolOptions::new()
39 .max_connections(num_cn)
40 .connect(&database_url).await
41
42}
43
44pub use sqlx;
46
47#[cfg(test)]
48mod tests {
49 use super::*;
50 use sqlx::Row;
51
52 #[tokio::test]
53 async fn should_postgres_connection_ok() -> Result<(), sqlx::Error> {
54 let postgres_cn = PostgresConn::new(
55 ("myuser".to_string(), "mypassword".to_string(),
56 "localhost".to_string(), "mydatabase".to_string(), 5432)
57 );
58 let cn = create_connection(postgres_cn, 5).await;
59 assert_eq!(cn.is_ok(), true);
60 let row: (i64,) = sqlx::query_as("SELECT $1").bind(150_i64).fetch_one(&cn?).await?;
62 assert_eq!(row.0 == 150, true);
63 Ok(())
64 }
65}