11 releases

0.1.8 Feb 22, 2025
0.1.7 Feb 22, 2025
0.1.4 May 3, 2023
0.1.3 Mar 30, 2023
0.0.1 Nov 23, 2020

#1390 in Database interfaces

Download history 1/week @ 2024-11-13 5/week @ 2024-11-20 3/week @ 2024-11-27 9/week @ 2024-12-04 13/week @ 2024-12-11 6/week @ 2025-02-05 476/week @ 2025-02-19 84/week @ 2025-02-26

566 downloads per month

MIT/Apache

37KB
749 lines

ergol

CI Docs Book

This crate provides the #[ergol] macro. It allows to persist the data in a database. For example, you just have to write

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:

// Drop the user table if it exists
User::drop_table().execute(&client).await.ok();

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

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

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

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

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

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

See the book for more information.

Dependencies

~9–42MB
~691K SLoC