Getting started

This crate provides the #[ergol] macro. You can use it by adding

ergol = "0.1"

to your dependencies.

It allows to persist the data in a database. For example, you just have to write

#![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: Option<i32>,
}
}

and the #[ergol] macro will generate most of the code you will need. You'll then be able to run code like 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: Option<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);
        }
    });
// Drop the user table if it exists
User::drop_table().execute(&db).await.ok();

// Create the user table
User::create_table().execute(&db).await?;

// Create a user and save it into the database
let mut user: User = User::create("thomas", "pa$$w0rd", Some(28)).save(&db).await?;

// Change some of its fields
*user.age.as_mut().unwrap() += 1;

// Update the user in the database
user.save(&db).await?;

// Fetch a user by its username thanks to the unique attribute
let user: Option<User> = User::get_by_username("thomas", &db).await?;

// Select all users
let users: Vec<User> = User::select().execute(&db).await?;
Ok(())
}