| Crates.io | postro-macros |
| lib.rs | postro-macros |
| version | 0.1.1 |
| created_at | 2025-05-05 12:49:03.141399+00 |
| updated_at | 2025-05-05 12:58:42.289073+00 |
| description | Postro Proc Macro |
| homepage | |
| repository | https://github.com/ariaandika/postro |
| max_upload_size | |
| id | 1660674 |
| size | 7,190 |
Asynchronous Postgres Driver and Utility.
Originally, this is an attempt to take out the Postgres part of sqlx crate, but the underlying structure is very different, although the public interface api is pretty simmilar.
To install postro, run:
cargo add postro
or add this line to your Cargo.toml in [dependencies] section:
postro = "0.1.1"
The general usage is to use database pooling via the Pool API:
use postro::{FromRow, Pool, Result, execute, query};
// automatically extract query result
#[derive(Debug, FromRow)]
struct Post {
id: i32,
name: String,
}
#[tokio::main]
async fn main() -> Result<()> {
// will read the `DATABASE_URL` environment variable
let mut pool = Pool::connect_env().await?;
let mut handles = vec![];
// execute a statement
execute("CREATE TABLE post(id serial, name text)", &mut pool).await?;
for i in 0..24 {
// cloning pool is cheap and share the same connection pool
let mut pool = pool.clone();
handles.push(tokio::spawn(async move {
execute("INSERT INTO post(name) VALUES($1)", &mut pool)
.bind(&format!("thread{i}"))
.await
}));
}
for h in handles {
h.await.unwrap()?;
}
// extract query result
let posts = query::<_, _, Post>("SELECT * FROM post", &mut pool)
.fetch_all()
.await?;
assert!(posts.iter().any(|e| e.name.as_str() == "thread23"));
assert_eq!(posts.len(), 24);
Ok(())
}
see the documentation for more details
This project is licensed under the MIT License - see the LICENSE file for details.