Crate ergol

Source
Expand description

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.

Re-exports§

pub use async_trait;
pub use bytes;
pub use tokio;
pub use tokio_postgres;

Modules§

pg
This module contains the types for postgres.
prelude
The prelude contains the macros and usefull traits.
query
This crate contains all the necessary queries.
relation
This module contains the struct that we use to represent the relationships between linked tables.

Structs§

Ergol
The type that wraps the connection to the database.
Transaction
A wrapper for tokio postgres transaction.

Traits§

Queryable
Trait.
ToTable
Any type that should be transformed into a table should implement this trait.

Functions§

connect
Connects to the specified database.

Attribute Macros§

ergol

Derive Macros§

PgEnum
Any enum that has no field on any variant can derive PgEnum in order to be usable in a #[ergol] struct.