Stop copying and pasting structs with the id
field removed just so you can
insert objects into tables with autoincrementing primary keys.
I mean really, who wants to do all that copying and pasting? Who wants to keep attributes and documentation in sync between two otherwise identical structs?
This whole idea came about after finding the excellent
macro_rules_attribute
crate by Daniel Henry-Mantilla,
aka my personal Rust macro hero.
```rust
extern crate dieselautoincrementnew_struct;
// Alternatively, you can either import the prelude where needed: // // use dieselincrementnewstruct::prelude::*; // // Or even import apply and NewInsertable individually: // // use dieselincrementnewstruct::apply; // use dieselincrementnew_struct::NewInsertable;
use diesel::prelude::*;
table! { users(id) { id -> Integer, name -> Text, } }
/// This is a user pub struct User { /// This is the ID of the user id: i32, /// This is the name of the user name: String }
// The code below gets generated by #[apply(NewInsertable!)]
/// This is a user pub struct NewUser { /// This is the name of the user name: String } ```
use diesel::prelude::*;
or use diesel::Insertable;
in whichever files you use this macro#[diesel(table_name = ...)]
attribute stopped taking a double quoted stringThe #[apply]
attribute should always be the topmost attribute above a struct,
unless the struct that you want to use it on is also deriving Identifiable
.
If that is the case, you should have that derive been the topmost attribute
above the struct so that it is excluded when generating the NewStruct
, becuase
obviously, without an id
, it won't be Identifiable
:
```rust
/// This is a user pub struct User { /// This is the ID of the user id: i32, /// This is the name of the user name: String } ```