GitHunt
LU

lukesneeringer/diesel-selectable-macro

A derive macro to select fields by key name in Diesel

diesel-selectable-macro

When inserting, Diesel allows you to derive the Insertable trait, which
inserts keys by name:

use diesel::prelude::*;

#[derive(Insertable)]
#[diesel(table_name = users)]
struct User {
  email: String,
  password_hash: String,
  // There's another field, `phone`, but we are not writing it.
}

// later on...

fn write(user: User) -> QueryResult<usize> {
  diesel::insert_into(users::table).values(user).execute(conn)
}

This crate offers a similar derive trait for reading data. Diesel's
Queryable trait reads by position rather than field name, but sometimes field
name is more convenient:

use diesel::prelude::*;
use diesel_selectable_macro::Selectable;

#[derive(Queryable, Selectable)]
#[diesel(table_name = users)]
struct User {
  email: String,
  password_hash: String,
  // There's another field, `phone`, but we do not need to read it.
}

// later on...

fn read(email: String) -> QueryResult<User> {
  User::select().filter(crate::schema::users::email.eq(&email)).get_result(conn)
}

The automatically derived select method provides the explicit fields to
Diesel, corresponding to the struct fields.

Languages

Rust100.0%

Contributors

MIT License
Created July 1, 2022
Updated January 12, 2023
lukesneeringer/diesel-selectable-macro | GitHunt