Ergol macro

The #[ergol] macro transforms your struct in a table, and gives you methods to easily access it.

#![allow(unused)] fn main() { extern crate ergol; use ergol::prelude::*; #[ergol] pub struct User { #[id] pub id: i32, #[unique] pub username: String, pub password: String, pub age: i32, } }

The #[id] attribute

In every table, a primary key is required. For the moment, ergol requires to have an id column, which is an i32 field named id.

The #[unique] attribute

If a field is marked with the #[unique] attribute, the macro will generate extra methods to fetch an element from this attribute. For example, with the #[unique] pub username: String attribute, we can now use the following:

extern crate tokio; extern crate ergol; use ergol::prelude::*; #[ergol] pub struct User { #[id] pub id: i32, #[unique] pub username: String, pub password: String, pub age: i32, } #[tokio::main] async fn main() -> Result<(), ergol::tokio_postgres::Error> { let (db, connection) = ergol::connect( "host=localhost user=ergol password=ergol dbname=ergol", ergol::tokio_postgres::NoTls, ) .await?; tokio::spawn(async move { if let Err(e) = connection.await { eprintln!("connection error: {}", e); } }); User::drop_table().execute(&db).await.ok(); User::create_table().execute(&db).await?; let user: Option<User> = User::get_by_username("thomas", &db).await?; Ok(()) }