sui_gql_client/queries/
objects_flat.rs

1use cynic::QueryFragment;
2use serde::Deserialize;
3
4use super::fragments::{ObjectFilter, PageInfoForward};
5use crate::{schema, Paged};
6
7/// Paged object data where the `Object` fragment does take any parameters.
8#[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// =============================================================================
50//  Variables
51// =============================================================================
52
53#[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// =============================================================================
61//  Inner query fragments
62// =============================================================================
63
64/// `ObjectConnection` where the `Object` fragment does take any parameters.
65#[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}