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 |
#102 in Database interfaces
30 downloads per month
Used in 3 crates
290KB
7.5K
SLoC
Elephantry
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 theinspect
module to inspect a database structure;pg14
— enables postgresql 14 features (multirange and newTargetSessionAttrs
);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
~4–38MB
~616K SLoC