pgui_api/
lib.rs

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