sui_gql_client/queries/
objects_flat.rs1use cynic::QueryFragment;
2use serde::Deserialize;
3
4use super::fragments::{ObjectFilter, PageInfoForward};
5use crate::{schema, Paged};
6
7#[derive(cynic::QueryFragment, Clone, Debug)]
9#[cynic(variables = "Variables")]
10pub struct Query<Object>
11where
12 Object: QueryFragment<SchemaType = schema::Object, VariablesFields = ()>,
13{
14 #[arguments(filter: $filter, first: $first, after: $after)]
15 pub objects: ObjectConnection<Object>,
16}
17
18impl<Object> Query<Object> where
19 Object: QueryFragment<SchemaType = schema::Object, VariablesFields = ()>
20{
21}
22
23impl<Object> Paged for Query<Object>
24where
25 Object: for<'de> Deserialize<'de>
26 + QueryFragment<SchemaType = schema::Object, VariablesFields = ()>
27 + Send,
28{
29 type Input = Variables;
30
31 type NextInput = Variables;
32
33 type NextPage = Self;
34
35 fn next_variables(&self, mut prev_vars: Self::Input) -> Option<Self::NextInput> {
36 let PageInfoForward {
37 has_next_page,
38 end_cursor,
39 } = &self.objects.page_info;
40 if *has_next_page {
41 prev_vars.after.clone_from(end_cursor);
42 Some(prev_vars)
43 } else {
44 None
45 }
46 }
47}
48
49#[derive(cynic::QueryVariables, Clone, Debug)]
54pub struct Variables {
55 pub filter: Option<ObjectFilter>,
56 pub after: Option<String>,
57 pub first: Option<i32>,
58}
59
60#[derive(cynic::QueryFragment, Clone, Debug)]
66#[cynic(graphql_type = "ObjectConnection")]
67pub struct ObjectConnection<Object>
68where
69 Object: QueryFragment<SchemaType = schema::Object, VariablesFields = ()>,
70{
71 pub nodes: Vec<Object>,
72 pub page_info: PageInfoForward,
73}