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
#[macro_use] extern crate juniper; #[derive(GraphQLObject)] pub struct PageInfo { pub has_previous_page: bool, pub has_next_page: bool } #[macro_export] macro_rules! relay_connection { ($name:ident, $edgename:ident, $type:ty) => { relay_connection!($name, $edgename, $type, ()); }; ($name:ident, $edgename:ident, $type:ty, $context:ty) => { pub struct $edgename { node: $type, cursor: String } graphql_object!($edgename: $context |&self| { field node() -> &$type { &self.node } field cursor() -> &String { &self.cursor } }); impl $edgename { #[allow(dead_code)] pub fn new(node: $type, cursor: String) -> $edgename { $edgename { node: node, cursor: cursor } } } pub struct $name { page_info: $crate::PageInfo, edges: Vec<$edgename> } graphql_object!($name: $context |&self| { field page_info() -> &$crate::PageInfo { &self.page_info } field edges() -> &Vec<$edgename> { &self.edges } }); impl $name { #[allow(dead_code)] pub fn new(page_info: $crate::PageInfo, edges: Vec<$edgename>) -> $name { $name { page_info: page_info, edges: edges } } } } }