1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//! ```rust
//! use async_graphql::SimpleObject;
//! use channel_loader::diesel::{DieselError, DieselLoader};
//! use db::schema::users;
//! use diesel::prelude::*;
//! use diesel_connection::PooledConnection;
//! use std::collections::HashMap;
//!
//! derive_id! {
//!   #[derive(Identifiable)]
//!   #[table_name = "users"]
//!   #[graphql(name = "UserID")]
//!   pub struct UserId( #[column_name = "id"] i32);
//! }
//!
//! #[derive(SimpleObject, Identifiable, Associations, Queryable, Debug, Clone)]
//! #[belongs_to(UserId, foreign_key = "id")]
//! #[table_name = "users"]
//! pub struct User {
//!   pub id: i32,
//!   pub name: String,
//! }
//!
//! #[derive(Default)]
//! pub struct UserLoader;
//!
//! impl DieselLoader for UserLoader {
//!   type Key = UserId;
//!   type Value = Vec<User>;
//!   fn load(
//!     conn: PooledConnection,
//!     keys: Vec<UserId>,
//!   ) -> Result<HashMap<Self::Key, Self::Value>, DieselError> {
//!     let users: Vec<User> = User::belonging_to(&keys)
//!       .select(users::all_columns)
//!       .load::<User>(&conn)?;
//!
//!     let grouped_users = users.grouped_by(&keys);
//!
//!     let mut data: HashMap<UserId, Vec<User>> = HashMap::new();
//!
//!     data.extend(keys.into_iter().zip(grouped_users.into_iter()));
//!
//!     Ok(data)
//!   }
//! }
//!
//! define_static_loader!(UserLoader);
//! attach_loader!(User, UserLoader);
//! ```


#![allow(dead_code)]
#[allow(rustdoc::private_intra_doc_links)]
#[doc(hidden)]
pub extern crate atomic_take;
#[doc(hidden)]
pub extern crate booter;
#[doc(hidden)]
pub extern crate crossbeam;
#[doc(hidden)]
pub extern crate static_init;

#[cfg(feature = "diesel-loader")]
pub mod diesel;
mod key;
#[doc(hidden)]
pub mod loadable;
#[doc(hidden)]
pub mod loader;
mod reactor;
mod request;
pub mod task;

pub use key::Key;
pub use loadable::Loadable;