sui_gql_client/queries/
events_backward.rs1use super::Error;
2use crate::queries::model::fragments::{EventEdge, EventFilter};
3use crate::{GraphQlClient, GraphQlResponseExt as _, schema};
4
5pub async fn query<C: GraphQlClient>(
11 client: &C,
12 filter: Option<EventFilter>,
13 cursor: Option<String>,
14 page_size: Option<u32>,
15) -> super::Result<(Vec<EventEdge>, bool), C> {
16 let vars = Variables {
17 filter,
18 before: cursor,
19 last: page_size.map(|v| v as i32),
20 };
21 let data: Option<Query> = client
22 .query(vars)
23 .await
24 .map_err(Error::Client)?
25 .try_into_data()?;
26 graphql_extract::extract!(data => {
27 events? {
28 edges
29 page_info {
30 has_previous_page
31 }
32 }
33 });
34 Ok((edges, has_previous_page))
35}
36
37#[derive(cynic::QueryVariables, Debug, Clone)]
42struct Variables {
43 last: Option<i32>,
44 before: Option<String>,
45 filter: Option<EventFilter>,
46}
47
48#[derive(cynic::QueryFragment, Debug)]
49#[cynic(graphql_type = "Query", variables = "Variables")]
50struct Query {
51 #[arguments(before: $before, filter: $filter, last: $last)]
52 events: Option<EventConnection>,
53}
54
55#[cfg(test)]
56#[allow(clippy::unwrap_used)]
57#[test]
58fn init_gql_output() {
59 use cynic::QueryBuilder as _;
60 let filter = EventFilter {
61 sender: None,
62 after_checkpoint: None,
63 before_checkpoint: None,
64 at_checkpoint: None,
65 type_: None,
66 module: None,
67 };
68 let vars = Variables {
69 filter: Some(filter),
70 before: None,
71 last: None,
72 };
73 let operation = Query::build(vars);
74 insta::assert_snapshot!(operation.query, @r###"
75 query Query($last: Int, $before: String, $filter: EventFilter) {
76 events(before: $before, filter: $filter, last: $last) {
77 edges {
78 node {
79 timestamp
80 contents {
81 type {
82 repr
83 }
84 bcs
85 }
86 }
87 cursor
88 }
89 pageInfo {
90 hasPreviousPage
91 }
92 }
93 }
94 "###);
95}
96
97#[derive(cynic::QueryFragment, Clone, Debug)]
102struct EventConnection {
103 edges: Vec<EventEdge>,
104 page_info: HasPreviousPage,
105}
106
107#[derive(cynic::QueryFragment, Clone, Debug)]
108#[cynic(graphql_type = "PageInfo")]
109pub struct HasPreviousPage {
110 pub has_previous_page: bool,
111}