nanopool 1.2.0

A tiny database connection pooling library for PostgreSQL
Documentation
# nanopool

A fast and tiny asynchronous database pool for PostgreSQL.

The pool is built on top of the Tokio ecosystem to minimize non-Tokio dependencies and maximize performance. It also aims to be easy to use, with a simple API and minimal configuration. The pool has built-in TLS support, and optional features like `uuid` can be enabled for additional PostgreSQL functionality. It purposely does not support other databases to keep the codebase small and focused.

The pool is backed by a Tokio `mpsc` channel, which is optimized for fast concurrent access. Database operations are executed using `tokio-postgres`, which is a high-performance asynchronous PostgreSQL driver. Secure connections to PostgreSQL are supported through the `tokio-native-tls` crate. The core pool implementation is <200 lines of code, making it lightweight and easy to understand.

## Usage

1. Add `nanopool` to your `Cargo.toml`:

```toml
[dependencies]
nanopool = "1.2"
```

2. Create and use a connection pool:

```rust
use nanopool::{Pool, tls};

// create the pool with TLS support
let tls = tls::configure(tls::TlsMode::Require).unwrap();
let pool_size = 4;
let pool = Pool::new("postgresql://postgres:postgres@localhost/postgres", tls, pool_size).await.unwrap();

// or without TLS support
// let pool = Pool::new("postgresql://postgres:postgres@localhost/postgres", tls::NoTls, pool_size).await.unwrap();

// returns a `tokio_postgres::Client` instance
let client = pool.client().await.unwrap();

// execute a query
let row = client.query_one("SELECT 1 + 2", &[]).await.unwrap();
let sum: i32 = row.get(0);

// the client is automatically returned to the pool when dropped
```

## Optional features

- `uuid`: Enables support for UUIDs so they can be used in and returned from queries. This feature depends on the `uuid` crate. These can then be used from your code with `nanopool::uuid::Uuid`.

## Development

### Building

To build the library:

```sh
cargo build
```

### Testing

To run unit tests:

```sh
cargo test
```

To also run integration tests against a PostgreSQL database:

```sh
docker compose -f tests/docker-compose.test.yml up -d
cargo test -- --include-ignored
```