Crate ergol[][src]

Expand description

CI Docs

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.

Traits

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.