1#[macro_use]
2extern crate juniper;
3
4#[derive(GraphQLObject)]
5pub struct PageInfo {
6 pub has_previous_page: bool,
7 pub has_next_page: bool
8}
9
10#[macro_export]
11macro_rules! relay_connection {
12 ($name:ident, $edgename:ident, $type:ty) => {
13 relay_connection!($name, $edgename, $type, ());
14 };
15 ($name:ident, $edgename:ident, $type:ty, $context:ty) => {
16 pub struct $edgename {
17 node: $type,
18 cursor: String
19 }
20
21 graphql_object!($edgename: $context |&self| {
22 field node() -> &$type {
23 &self.node
24 }
25
26 field cursor() -> &String {
27 &self.cursor
28 }
29 });
30
31 impl $edgename {
32 #[allow(dead_code)]
33 pub fn new(node: $type, cursor: String) -> $edgename {
34 $edgename {
35 node: node,
36 cursor: cursor
37 }
38 }
39 }
40
41 pub struct $name {
42 page_info: $crate::PageInfo,
43 edges: Vec<$edgename>
44 }
45
46 graphql_object!($name: $context |&self| {
47 field page_info() -> &$crate::PageInfo {
48 &self.page_info
49 }
50
51 field edges() -> &Vec<$edgename> {
52 &self.edges
53 }
54 });
55
56 impl $name {
57 #[allow(dead_code)]
58 pub fn new(page_info: $crate::PageInfo, edges: Vec<$edgename>) -> $name {
59 $name {
60 page_info: page_info,
61 edges: edges
62 }
63 }
64 }
65 }
66}