Skip to main content

linear_queries/
queries.rs

1use crate::filters::IssueFilter;
2use crate::filters::IssueLabelFilter;
3use crate::filters::ProjectFilter;
4use crate::filters::TeamFilter;
5use crate::filters::UserFilter;
6use crate::filters::WorkflowStateFilter;
7use crate::types::Issue;
8use crate::types::IssueCommentConnection;
9use crate::types::IssueConnection;
10use crate::types::IssueLabelConnection;
11use crate::types::IssueSearchPayload;
12use crate::types::ProjectConnection;
13use crate::types::TeamConnection;
14use crate::types::UserConnection;
15use crate::types::WorkflowStateConnection;
16use linear_schema::linear as schema;
17
18#[derive(cynic::QueryVariables, Debug, Clone)]
19pub struct IssuesArguments {
20    pub first: Option<i32>,
21    pub after: Option<String>,
22    pub filter: Option<IssueFilter>,
23}
24
25#[derive(cynic::QueryFragment, Debug)]
26#[cynic(
27    graphql_type = "Query",
28    schema = "linear",
29    variables = "IssuesArguments"
30)]
31pub struct IssuesQuery {
32    #[arguments(first: $first, after: $after, filter: $filter)]
33    pub issues: IssueConnection,
34}
35
36#[derive(cynic::QueryVariables, Debug, Clone)]
37pub struct IssueByIdArguments {
38    pub id: String,
39}
40
41#[derive(cynic::QueryFragment, Debug)]
42#[cynic(
43    graphql_type = "Query",
44    schema = "linear",
45    variables = "IssueByIdArguments"
46)]
47pub struct IssueByIdQuery {
48    #[arguments(id: $id)]
49    pub issue: Option<Issue>,
50}
51
52#[derive(cynic::QueryVariables, Debug, Clone)]
53pub struct SearchIssuesArguments {
54    pub term: String,
55    #[cynic(rename = "includeComments")]
56    pub include_comments: Option<bool>,
57    pub first: Option<i32>,
58    pub after: Option<String>,
59    pub filter: Option<IssueFilter>,
60}
61
62#[derive(cynic::QueryFragment, Debug)]
63#[cynic(
64    graphql_type = "Query",
65    schema = "linear",
66    variables = "SearchIssuesArguments"
67)]
68pub struct SearchIssuesQuery {
69    #[arguments(term: $term, includeComments: $include_comments, first: $first, after: $after, filter: $filter)]
70    #[cynic(rename = "searchIssues")]
71    pub search_issues: IssueSearchPayload,
72}
73
74// ============================================================================
75// Metadata queries
76// ============================================================================
77
78#[derive(cynic::QueryVariables, Debug, Clone)]
79pub struct UsersArguments {
80    pub first: Option<i32>,
81    pub after: Option<String>,
82    pub filter: Option<UserFilter>,
83}
84
85#[derive(cynic::QueryFragment, Debug)]
86#[cynic(
87    graphql_type = "Query",
88    schema = "linear",
89    variables = "UsersArguments"
90)]
91pub struct UsersQuery {
92    #[arguments(first: $first, after: $after, filter: $filter)]
93    pub users: UserConnection,
94}
95
96#[derive(cynic::QueryVariables, Debug, Clone)]
97pub struct TeamsArguments {
98    pub first: Option<i32>,
99    pub after: Option<String>,
100    pub filter: Option<TeamFilter>,
101}
102
103#[derive(cynic::QueryFragment, Debug)]
104#[cynic(
105    graphql_type = "Query",
106    schema = "linear",
107    variables = "TeamsArguments"
108)]
109pub struct TeamsQuery {
110    #[arguments(first: $first, after: $after, filter: $filter)]
111    pub teams: TeamConnection,
112}
113
114#[derive(cynic::QueryVariables, Debug, Clone)]
115pub struct ProjectsArguments {
116    pub first: Option<i32>,
117    pub after: Option<String>,
118    pub filter: Option<ProjectFilter>,
119}
120
121#[derive(cynic::QueryFragment, Debug)]
122#[cynic(
123    graphql_type = "Query",
124    schema = "linear",
125    variables = "ProjectsArguments"
126)]
127pub struct ProjectsQuery {
128    #[arguments(first: $first, after: $after, filter: $filter)]
129    pub projects: ProjectConnection,
130}
131
132#[derive(cynic::QueryVariables, Debug, Clone)]
133pub struct WorkflowStatesArguments {
134    pub first: Option<i32>,
135    pub after: Option<String>,
136    pub filter: Option<WorkflowStateFilter>,
137}
138
139#[derive(cynic::QueryFragment, Debug)]
140#[cynic(
141    graphql_type = "Query",
142    schema = "linear",
143    variables = "WorkflowStatesArguments"
144)]
145pub struct WorkflowStatesQuery {
146    #[arguments(first: $first, after: $after, filter: $filter)]
147    #[cynic(rename = "workflowStates")]
148    pub workflow_states: WorkflowStateConnection,
149}
150
151#[derive(cynic::QueryVariables, Debug, Clone)]
152pub struct IssueLabelsArguments {
153    pub first: Option<i32>,
154    pub after: Option<String>,
155    pub filter: Option<IssueLabelFilter>,
156}
157
158#[derive(cynic::QueryFragment, Debug)]
159#[cynic(
160    graphql_type = "Query",
161    schema = "linear",
162    variables = "IssueLabelsArguments"
163)]
164pub struct IssueLabelsQuery {
165    #[arguments(first: $first, after: $after, filter: $filter)]
166    #[cynic(rename = "issueLabels")]
167    pub issue_labels: IssueLabelConnection,
168}
169
170// ============================================================================
171// Issue relation queries
172// ============================================================================
173
174#[derive(cynic::QueryFragment, Debug, Clone)]
175#[cynic(schema = "linear")]
176pub struct IssueRelation {
177    pub id: cynic::Id,
178    #[cynic(rename = "relatedIssue")]
179    pub related_issue: RelatedIssue,
180}
181
182#[derive(cynic::QueryFragment, Debug, Clone)]
183#[cynic(schema = "linear", graphql_type = "Issue")]
184pub struct RelatedIssue {
185    pub id: cynic::Id,
186}
187
188#[derive(cynic::QueryFragment, Debug, Clone)]
189#[cynic(schema = "linear")]
190pub struct IssueRelationConnection {
191    pub nodes: Vec<IssueRelation>,
192}
193
194#[derive(cynic::QueryFragment, Debug, Clone)]
195#[cynic(schema = "linear", graphql_type = "Issue")]
196pub struct IssueWithRelations {
197    pub id: cynic::Id,
198    pub relations: IssueRelationConnection,
199    #[cynic(rename = "inverseRelations")]
200    pub inverse_relations: IssueRelationConnection,
201}
202
203#[derive(cynic::QueryVariables, Debug, Clone)]
204pub struct IssueRelationsArguments {
205    pub id: String,
206}
207
208#[derive(cynic::QueryFragment, Debug)]
209#[cynic(
210    graphql_type = "Query",
211    schema = "linear",
212    variables = "IssueRelationsArguments"
213)]
214pub struct IssueRelationsQuery {
215    #[arguments(id: $id)]
216    pub issue: Option<IssueWithRelations>,
217}
218
219// ============================================================================
220// Issue comments query
221// ============================================================================
222
223#[derive(cynic::QueryFragment, Debug, Clone)]
224#[cynic(
225    schema = "linear",
226    graphql_type = "Issue",
227    variables = "IssueCommentsArguments"
228)]
229pub struct IssueWithComments {
230    pub id: cynic::Id,
231    pub identifier: String,
232    #[arguments(first: $first, after: $after)]
233    pub comments: IssueCommentConnection,
234}
235
236#[derive(cynic::QueryVariables, Debug, Clone)]
237pub struct IssueCommentsArguments {
238    pub id: String,
239    pub first: Option<i32>,
240    pub after: Option<String>,
241}
242
243#[derive(cynic::QueryFragment, Debug)]
244#[cynic(
245    graphql_type = "Query",
246    schema = "linear",
247    variables = "IssueCommentsArguments"
248)]
249pub struct IssueCommentsQuery {
250    #[arguments(id: $id)]
251    pub issue: Option<IssueWithComments>,
252}