generated from phundrak/rust-poem-openapi-template
feat: rename crates from gejdr-crud to georm
This commit renames gejdr-crud to georm for an easier name to remember in case I publish `georm` and `georm-macros`. This commit extracts the `Georm` (formerly `Crud`) trait from `gejdr-core` to its dedicated crate `georm` on which gejdr-core now depends. Currently writing tests
This commit is contained in:
22
georm/Cargo.toml
Normal file
22
georm/Cargo.toml
Normal file
@@ -0,0 +1,22 @@
|
||||
[package]
|
||||
name = "georm"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
authors = ["Lucien Cartier-Tilet <lucien@phundrak.com>"]
|
||||
description = "A small, opiniated ORM for SQLx and PostgreSQL"
|
||||
homepage = "https://labs.phundrak.com/phundrak/gejdr-rs"
|
||||
repository = "https://labs.phundrak.com/phundrak/gejdr-rs"
|
||||
license = "MIT OR GPL-3.0-or-later"
|
||||
keywords = ["sqlx", "orm", "postgres", "postgresql", "database", "async"]
|
||||
categories = ["database"]
|
||||
|
||||
[dependencies]
|
||||
georm-macros = { path = "../georm-macros" }
|
||||
|
||||
[dependencies.sqlx]
|
||||
version = "0.8.3"
|
||||
default-features = false
|
||||
features = ["postgres", "runtime-tokio", "macros", "migrate"]
|
||||
|
||||
[lints.rust]
|
||||
unsafe_code = "forbid"
|
||||
1
georm/README.md
Normal file
1
georm/README.md
Normal file
@@ -0,0 +1 @@
|
||||
# A small, opiniated ORM for SQLx with PostgreSQL
|
||||
82
georm/src/lib.rs
Normal file
82
georm/src/lib.rs
Normal file
@@ -0,0 +1,82 @@
|
||||
#![deny(clippy::all)]
|
||||
#![deny(clippy::pedantic)]
|
||||
#![deny(clippy::nursery)]
|
||||
#![allow(clippy::module_name_repetitions)]
|
||||
#![allow(clippy::unused_async)]
|
||||
#![forbid(unsafe_code)]
|
||||
|
||||
pub use georm_macros::Georm;
|
||||
|
||||
pub trait Georm<Id> {
|
||||
/// Find the entiy in the database based on its identifier.
|
||||
///
|
||||
/// # Errors
|
||||
/// Returns any error Postgres may have encountered
|
||||
fn find(
|
||||
pool: &sqlx::PgPool,
|
||||
id: &Id,
|
||||
) -> impl std::future::Future<Output = sqlx::Result<Option<Self>>> + Send
|
||||
where
|
||||
Self: Sized;
|
||||
|
||||
/// Create the entity in the database.
|
||||
///
|
||||
/// # Errors
|
||||
/// Returns any error Postgres may have encountered
|
||||
fn create(
|
||||
&self,
|
||||
pool: &sqlx::PgPool,
|
||||
) -> impl std::future::Future<Output = sqlx::Result<Self>> + Send
|
||||
where
|
||||
Self: Sized;
|
||||
|
||||
/// Update an entity with a matching identifier in the database.
|
||||
///
|
||||
/// # Errors
|
||||
/// Returns any error Postgres may have encountered
|
||||
fn update(
|
||||
&self,
|
||||
pool: &sqlx::PgPool,
|
||||
) -> impl std::future::Future<Output = sqlx::Result<Self>> + Send
|
||||
where
|
||||
Self: Sized;
|
||||
|
||||
/// Update an entity with a matching identifier in the database if
|
||||
/// it exists, create it otherwise.
|
||||
///
|
||||
/// # Errors
|
||||
/// Returns any error Postgres may have encountered
|
||||
fn create_or_update(
|
||||
&self,
|
||||
pool: &sqlx::PgPool,
|
||||
) -> impl std::future::Future<Output = sqlx::Result<Self>> + Send
|
||||
where
|
||||
Self: Sized;
|
||||
|
||||
/// Delete the entity from the database if it exists.
|
||||
///
|
||||
/// # Returns
|
||||
/// Returns the amount of rows affected by the deletion.
|
||||
///
|
||||
/// # Errors
|
||||
/// Returns any error Postgres may have encountered
|
||||
fn delete(
|
||||
&self,
|
||||
pool: &sqlx::PgPool,
|
||||
) -> impl std::future::Future<Output = sqlx::Result<u64>> + Send;
|
||||
|
||||
/// Delete any entity with the identifier `id`.
|
||||
///
|
||||
/// # Returns
|
||||
/// Returns the amount of rows affected by the deletion.
|
||||
///
|
||||
/// # Errors
|
||||
/// Returns any error Postgres may have encountered
|
||||
fn delete_by_id(
|
||||
pool: &sqlx::PgPool,
|
||||
id: &Id,
|
||||
) -> impl std::future::Future<Output = sqlx::Result<u64>> + Send;
|
||||
|
||||
/// Returns the identifier of the entity.
|
||||
fn get_id(&self) -> &Id;
|
||||
}
|
||||
0
georm/tests/fixtures/simple_struct.sql
vendored
Normal file
0
georm/tests/fixtures/simple_struct.sql
vendored
Normal file
9
georm/tests/simple_struct.rs
Normal file
9
georm/tests/simple_struct.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use georm::Georm;
|
||||
|
||||
#[derive(Debug, Georm)]
|
||||
#[georm(table = "tests.authors")]
|
||||
struct Author {
|
||||
#[georm(column = "author_id", id)]
|
||||
id: i32,
|
||||
name: String
|
||||
}
|
||||
Reference in New Issue
Block a user