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 ,
}
}
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
.
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 (())
}