#diesel #select #field #fields #macro #struct-fields #selectable

macro diesel-selectable-macro

A derivable Serialize macro that selects precise fields

3 releases (1 stable)

1.0.0 Dec 21, 2022
0.3.0 Sep 23, 2022
0.2.0 Sep 23, 2022
0.1.0 Jun 30, 2022

#1960 in Procedural macros

Download history 17/week @ 2023-11-18 3/week @ 2023-12-09 1/week @ 2023-12-16 18/week @ 2023-12-30 1/week @ 2024-02-03 1/week @ 2024-02-10 43/week @ 2024-02-17 21/week @ 2024-02-24 12/week @ 2024-03-02

77 downloads per month

MIT license

9KB
142 lines

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.

Dependencies

~1.5MB
~40K SLoC