DieselCrud traits and derives

This commit is contained in:
Martin Berg Alstad
2024-08-19 19:40:14 +02:00
parent 2c8577a11d
commit ae775f4e9e
21 changed files with 1555 additions and 101 deletions

12
crates/tests/Cargo.toml Normal file
View File

@ -0,0 +1,12 @@
[package]
name = "tests"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
homepage.workspace = true
[dependencies]
diesel = { workspace = true }
diesel-async = { workspace = true }
lib = { path = "../../../lib", features = ["diesel", "derive"] }

1
crates/tests/src/lib.rs Normal file
View File

@ -0,0 +1 @@
// This file is needed to make the tests directory a crate

View File

@ -0,0 +1,82 @@
#![allow(unused)]
use diesel::{AsChangeset, Insertable, Queryable, Selectable};
use diesel_async::pooled_connection::deadpool::Pool;
use diesel_async::pooled_connection::AsyncDieselConnectionManager;
use diesel_async::AsyncPgConnection;
use lib::diesel_crud_derive::{
DieselCrud, DieselCrudCreate, DieselCrudDelete, DieselCrudList, DieselCrudRead,
DieselCrudUpdate,
};
use lib::diesel_crud_trait::DieselCrudCreate;
diesel::table! {
user (email) {
#[max_length = 255]
email -> Varchar,
}
}
#[derive(Queryable, Selectable, Insertable, AsChangeset)]
#[diesel(table_name = user)]
struct User {
email: String,
}
#[derive(Insertable)]
#[diesel(table_name = user)]
struct InsertUser {
email: String,
}
#[derive(DieselCrud)]
#[diesel_crud(table = user, entity = User, pk = String, pk_field = email, create = InsertUser, update = User)]
struct TestService {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudCreate, DieselCrudRead, DieselCrudUpdate, DieselCrudDelete, DieselCrudList)]
#[diesel_crud(table = user, entity = User, pk = String, pk_field = email, create = InsertUser, update = User)]
struct TestServiceSeparate {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudCreate)]
#[diesel_crud(table = user, entity = User, create = InsertUser)]
struct TestServiceCreate {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudRead)]
#[diesel_crud(table = user, entity = User, pk = String)]
struct TestServiceRead {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudUpdate)]
#[diesel_crud(table = user, update = User)]
struct TestServiceUpdate {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudDelete)]
#[diesel_crud(table = user, pk = String, pk_field = email)]
struct TestServiceDelete {
pool: Pool<AsyncPgConnection>,
}
#[derive(DieselCrudList)]
#[diesel_crud(table = user, entity = User)]
struct TestServiceList {
pool: Pool<AsyncPgConnection>,
}
#[test]
fn test_insert_user() {
let config = AsyncDieselConnectionManager::<AsyncPgConnection>::new("");
let pool = Pool::builder(config).max_size(10).build().unwrap();
let service = TestServiceCreate { pool };
service.create(&InsertUser {
email: "test".to_string(),
});
}