38 releases (20 stable)

4.0.1 Mar 18, 2024
4.0.0-rc.2 Nov 25, 2023
3.3.0 May 28, 2023
3.2.0 Mar 17, 2023
0.4.0 Jun 10, 2020

#55 in Database interfaces

Download history 48/week @ 2024-02-20 49/week @ 2024-02-27 143/week @ 2024-03-05 247/week @ 2024-03-12 133/week @ 2024-03-19 43/week @ 2024-03-26 162/week @ 2024-04-02

625 downloads per month
Used in 2 crates

MIT license

290KB
7.5K SLoC

Elephantry

Crates.io docs.rs Github actions pipeline status

When Rust meets PostgreSQL.

Getting Started

See quickstart and examples.

Quick overview

Elephantry is an OMM (object model manager) dedicated to PostgreSQL design to handle from simple to complex queries.

let database_url = std::env::var("DATABASE_URL")
    .unwrap_or_else(|_| "postgres://localhost".to_string());

// Connect
let elephantry = elephantry::Pool::new(&database_url)?;

// Simple query
let rows = elephantry.execute("select id from entity")?;

for row in &rows {
    let id: i32 = row.get("id");
    println!("{id}");
}

// Define entity
#[derive(elephantry::Entity)]
#[elephantry(model = "Model", structure = "Structure")]
struct Entity {
    #[elephantry(pk)]
    id: u16,
    deleted: bool,
}

// Read entities
let entity = elephantry.find_by_pk::<Model>(&elephantry::pk!(id))?;
let entities = elephantry.find_all::<Model>(None)?;
let entities = elephantry.find_where::<Model>("deleted = $1", &[&false], None)?;

// Write entities
elephantry.insert_one::<Model>(&entity)?;
elephantry.update_one::<Model>(&elephantry::pk!{id => entity.id}, &entity)?;
elephantry.delete_one::<Model>(&entity)?;
elephantry.delete_where::<Model>("deleted = $1", &[&true])?;

Features

  • all-types — enables all type features (see below);
  • arbitrary — add support for arbitrary crate;
  • config — adds support for config layered configuration system;
  • inspect — include the inspect module to inspect a database structure;
  • pg14 — enables postgresql 14 features (multirange and new TargetSessionAttrs);
  • r2d2 — adds support for r2d2 generic connection pool;
  • rocket — adds support for rocket web framewok;
  • serde — adds support for de/serialization via serde.

Types

  • bit — adds support for bit type;
  • date — adds support for date type;
  • geo — adds support for geometric type;
  • json — adds support for json type;
  • ltree — adds support for ltree types;
  • multirange — adds support for multirange type (postgresql >= 14);
  • money — adds support for money type;
  • net — adds support for network type;
  • numeric — adds support for numeric type;
  • time — adds support for time type;
  • uuid — adds support for uuid type;
  • xml — adds support for xml type.

Projects using Elephantry

  • todo — Todo rocket example app;
  • explain — A CLI tool transforms postgresql explain to a graph;
  • sav — A simple CRUD application to archive bought item waranty build with rocket;
  • out of gafam — Generate RSS feed for GAFAM (youtube, facebook, instagram and twitter) using actix.
  • captainstat — Another simple application builds with actix to display statitics;
  • oxfeed — A feed reader with an actix API and yew front.

If you want to add your project here, please create a pull request.

Dependencies

~5–43MB
~657K SLoC