use std::env;
use zero_postgres::tokio::Conn;
use zero_postgres::{Opts, SslMode};
#[expect(clippy::print_stdout)]
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let url = env::var("DATABASE_URL")?;
let mut opts: Opts = url.as_str().try_into()?;
opts.ssl_mode = SslMode::Require;
println!("Connecting with TLS...");
let mut conn = Conn::new(opts).await?;
println!("Connected!\n");
println!("=== SSL Status ===");
let rows1: Vec<(bool,)> = conn
.query_collect("SELECT ssl FROM pg_stat_ssl WHERE pid = pg_backend_pid()")
.await?;
if let Some((ssl_enabled,)) = rows1.first() {
println!(" SSL enabled: {}", ssl_enabled);
}
println!("\n=== Server Version ===");
let rows2: Vec<(String,)> = conn.query_collect("SELECT version()").await?;
if let Some((version,)) = rows2.first() {
println!(" {}", version);
}
println!("\n=== Current Time ===");
let rows3: Vec<(String,)> = conn.query_collect("SELECT now()::text").await?;
if let Some((now,)) = rows3.first() {
println!(" Server time: {}", now);
}
println!("\n=== Calculation ===");
let rows4: Vec<(i32,)> = conn.query_collect("SELECT 1 + 2 + 3").await?;
if let Some((sum,)) = rows4.first() {
println!(" 1 + 2 + 3 = {}", sum);
}
println!("\n=== Generate Series ===");
let rows5: Vec<(i32,)> = conn.query_collect("SELECT generate_series(1, 5)").await?;
print!(" Series: ");
for (i, (n,)) in rows5.iter().enumerate() {
if i > 0 {
print!(", ");
}
print!("{}", n);
}
println!();
println!();
conn.close().await?;
println!("Connection closed.");
Ok(())
}