sui_gql_client/queries/
objects_flat.rs

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
67
68
69
70
71
72
73
use cynic::QueryFragment;
use serde::Deserialize;

use super::fragments::{ObjectFilter, PageInfoForward};
use crate::{schema, Paged};

/// Paged object data where the `Object` fragment does take any parameters.
#[derive(cynic::QueryFragment, Clone, Debug)]
#[cynic(variables = "Variables")]
pub struct Query<Object>
where
    Object: QueryFragment<SchemaType = schema::Object, VariablesFields = ()>,
{
    #[arguments(filter: $filter, first: $first, after: $after)]
    pub objects: ObjectConnection<Object>,
}

impl<Object> Query<Object> where
    Object: QueryFragment<SchemaType = schema::Object, VariablesFields = ()>
{
}

impl<Object> Paged for Query<Object>
where
    Object: for<'de> Deserialize<'de>
        + QueryFragment<SchemaType = schema::Object, VariablesFields = ()>
        + Send,
{
    type Input = Variables;

    type NextInput = Variables;

    type NextPage = Self;

    fn next_variables(&self, mut prev_vars: Self::Input) -> Option<Self::NextInput> {
        let PageInfoForward {
            has_next_page,
            end_cursor,
        } = &self.objects.page_info;
        if *has_next_page {
            prev_vars.after.clone_from(end_cursor);
            Some(prev_vars)
        } else {
            None
        }
    }
}

// =============================================================================
//  Variables
// =============================================================================

#[derive(cynic::QueryVariables, Clone, Debug)]
pub struct Variables {
    pub filter: Option<ObjectFilter>,
    pub after: Option<String>,
    pub first: Option<i32>,
}

// =============================================================================
//  Inner query fragments
// =============================================================================

/// `ObjectConnection` where the `Object` fragment does take any parameters.
#[derive(cynic::QueryFragment, Clone, Debug)]
#[cynic(graphql_type = "ObjectConnection")]
pub struct ObjectConnection<Object>
where
    Object: QueryFragment<SchemaType = schema::Object, VariablesFields = ()>,
{
    pub nodes: Vec<Object>,
    pub page_info: PageInfoForward,
}