1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
pub mod config;
mod errors;
pub mod routes;
use log::LevelFilter;
use sqlx::postgres::{PgConnectOptions, PgPoolOptions};
use sqlx::{ConnectOptions, Pool, Postgres};
use url::{ParseError, Url};
pub async fn connect(url: &str) -> Result<Pool<Postgres>, errors::PgUIAPIError> {
let options = conn_options(url)?;
let pgp = PgPoolOptions::new()
.acquire_timeout(std::time::Duration::from_secs(10))
.max_connections(5)
.connect_with(options)
.await?;
Ok(pgp)
}
pub fn conn_options(url: &str) -> Result<PgConnectOptions, ParseError> {
let parsed = Url::parse(url)?;
let mut options = PgConnectOptions::new()
.host(parsed.host_str().ok_or(ParseError::EmptyHost)?)
.port(parsed.port().ok_or(ParseError::InvalidPort)?)
.username(parsed.username())
.password(parsed.password().ok_or(ParseError::IdnaError)?);
options.log_statements(LevelFilter::Debug);
Ok(options)
}