derive_id/
lib.rs

1#[allow(unused_imports)]
2#[allow(unused_macros)]
3#[cfg(test)]
4#[macro_use]
5extern crate diesel;
6
7pub extern crate async_graphql;
8pub extern crate derive_more;
9pub extern crate diesel_derive_newtype;
10pub extern crate serde;
11
12#[macro_export]
13macro_rules! derive_id {
14	($id_newtype:item) => {
15		#[derive(
16			$crate::async_graphql::NewType,
17			$crate::derive_more::Display,
18			$crate::diesel_derive_newtype::DieselNewType,
19			$crate::serde::Deserialize,
20			$crate::serde::Serialize,
21			Clone,
22			Copy,
23			Debug,
24			Eq,
25			Hash,
26			Ord,
27			PartialEq,
28			PartialOrd,
29		)]
30		$id_newtype
31	};
32}
33
34#[cfg(test)]
35mod tests {
36	table! {
37
38			content (id) {
39					id -> Int4,
40					title -> Varchar,
41			}
42	}
43
44	table! {
45
46			users (id) {
47					id -> Int4,
48					name -> Varchar,
49			}
50	}
51
52	table! {
53
54			users_content (user_id, content_id) {
55					user_id -> Int4,
56					content_id -> Int4,
57			}
58	}
59
60	derive_id! {
61		#[derive(Identifiable)]
62		#[diesel(table_name = users)]
63		#[graphql(name = "UserID")]
64		pub struct UserId(#[diesel(column_name = "id")] i32);
65	}
66
67	derive_id! {
68		#[derive(Identifiable)]
69		#[diesel(table_name = content)]
70		#[graphql(name = "ContentID")]
71		pub struct ContentId(#[diesel(column_name = "id")] i32);
72	}
73}