Skip to main content

linear_queries/
mutations.rs

1use crate::scalars::DateTime;
2use crate::scalars::TimelessDate;
3use crate::types::Issue;
4use linear_schema::linear as schema;
5
6#[derive(cynic::InputObject, Clone, Debug, Default)]
7#[cynic(schema = "linear")]
8pub struct IssueCreateInput {
9    #[cynic(rename = "teamId")]
10    pub team_id: String,
11    #[cynic(skip_serializing_if = "Option::is_none")]
12    pub title: Option<String>,
13    #[cynic(skip_serializing_if = "Option::is_none")]
14    pub description: Option<String>,
15    #[cynic(skip_serializing_if = "Option::is_none")]
16    pub priority: Option<i32>,
17    #[cynic(rename = "assigneeId", skip_serializing_if = "Option::is_none")]
18    pub assignee_id: Option<String>,
19    #[cynic(rename = "stateId", skip_serializing_if = "Option::is_none")]
20    pub state_id: Option<String>,
21    #[cynic(rename = "labelIds", skip_serializing_if = "Option::is_none")]
22    pub label_ids: Option<Vec<String>>,
23    #[cynic(rename = "projectId", skip_serializing_if = "Option::is_none")]
24    pub project_id: Option<String>,
25    #[cynic(rename = "parentId", skip_serializing_if = "Option::is_none")]
26    pub parent_id: Option<String>,
27}
28
29#[derive(cynic::QueryFragment, Debug, Clone)]
30#[cynic(schema = "linear")]
31pub struct IssuePayload {
32    pub success: bool,
33    pub issue: Option<Issue>,
34}
35
36#[derive(cynic::QueryVariables, Debug, Clone)]
37pub struct IssueCreateArguments {
38    pub input: IssueCreateInput,
39}
40
41#[derive(cynic::QueryFragment, Debug)]
42#[cynic(
43    graphql_type = "Mutation",
44    schema = "linear",
45    variables = "IssueCreateArguments"
46)]
47pub struct IssueCreateMutation {
48    #[arguments(input: $input)]
49    #[cynic(rename = "issueCreate")]
50    pub issue_create: IssuePayload,
51}
52
53#[derive(cynic::InputObject, Clone, Debug, Default)]
54#[cynic(schema = "linear")]
55pub struct IssueUpdateInput {
56    #[cynic(skip_serializing_if = "Option::is_none")]
57    pub title: Option<String>,
58    #[cynic(skip_serializing_if = "Option::is_none")]
59    pub description: Option<String>,
60    #[cynic(skip_serializing_if = "Option::is_none")]
61    pub priority: Option<i32>,
62    #[cynic(rename = "assigneeId", skip_serializing_if = "Option::is_none")]
63    pub assignee_id: Option<String>,
64    #[cynic(rename = "stateId", skip_serializing_if = "Option::is_none")]
65    pub state_id: Option<String>,
66    #[cynic(rename = "projectId", skip_serializing_if = "Option::is_none")]
67    pub project_id: Option<String>,
68    #[cynic(rename = "parentId", skip_serializing_if = "Option::is_none")]
69    pub parent_id: Option<String>,
70    #[cynic(rename = "labelIds", skip_serializing_if = "Option::is_none")]
71    pub label_ids: Option<Vec<String>>,
72    #[cynic(rename = "addedLabelIds", skip_serializing_if = "Option::is_none")]
73    pub added_label_ids: Option<Vec<String>>,
74    #[cynic(rename = "removedLabelIds", skip_serializing_if = "Option::is_none")]
75    pub removed_label_ids: Option<Vec<String>>,
76    #[cynic(rename = "dueDate", skip_serializing_if = "Option::is_none")]
77    pub due_date: Option<TimelessDate>,
78}
79
80#[derive(cynic::QueryVariables, Debug, Clone)]
81pub struct IssueUpdateArguments {
82    pub id: String,
83    pub input: IssueUpdateInput,
84}
85
86#[derive(cynic::QueryFragment, Debug)]
87#[cynic(
88    graphql_type = "Mutation",
89    schema = "linear",
90    variables = "IssueUpdateArguments"
91)]
92pub struct IssueUpdateMutation {
93    #[arguments(id: $id, input: $input)]
94    #[cynic(rename = "issueUpdate")]
95    pub issue_update: IssuePayload,
96}
97
98#[derive(cynic::InputObject, Clone, Debug, Default)]
99#[cynic(schema = "linear")]
100pub struct CommentCreateInput {
101    #[cynic(rename = "issueId")]
102    pub issue_id: String,
103    #[cynic(skip_serializing_if = "Option::is_none")]
104    pub body: Option<String>,
105    #[cynic(rename = "parentId", skip_serializing_if = "Option::is_none")]
106    pub parent_id: Option<String>,
107}
108
109#[derive(cynic::QueryFragment, Debug, Clone)]
110#[cynic(schema = "linear")]
111pub struct Comment {
112    pub id: cynic::Id,
113    pub body: String,
114    #[cynic(rename = "createdAt")]
115    pub created_at: DateTime,
116}
117
118#[derive(cynic::QueryFragment, Debug, Clone)]
119#[cynic(schema = "linear")]
120pub struct CommentPayload {
121    pub success: bool,
122    pub comment: Option<Comment>,
123}
124
125#[derive(cynic::QueryVariables, Debug, Clone)]
126pub struct CommentCreateArguments {
127    pub input: CommentCreateInput,
128}
129
130#[derive(cynic::QueryFragment, Debug)]
131#[cynic(
132    graphql_type = "Mutation",
133    schema = "linear",
134    variables = "CommentCreateArguments"
135)]
136pub struct CommentCreateMutation {
137    #[arguments(input: $input)]
138    #[cynic(rename = "commentCreate")]
139    pub comment_create: CommentPayload,
140}
141
142#[derive(cynic::QueryVariables, Debug, Clone)]
143pub struct IssueArchiveArguments {
144    pub id: String,
145}
146
147#[derive(cynic::QueryFragment, Debug, Clone)]
148#[cynic(schema = "linear")]
149pub struct IssueArchivePayload {
150    pub success: bool,
151}
152
153#[derive(cynic::QueryFragment, Debug)]
154#[cynic(
155    graphql_type = "Mutation",
156    schema = "linear",
157    variables = "IssueArchiveArguments"
158)]
159pub struct IssueArchiveMutation {
160    #[arguments(id: $id)]
161    #[cynic(rename = "issueArchive")]
162    pub issue_archive: IssueArchivePayload,
163}
164
165// ============================================================================
166// Issue relation mutations
167// ============================================================================
168
169#[derive(cynic::Enum, Clone, Copy, Debug)]
170#[cynic(schema = "linear")]
171pub enum IssueRelationType {
172    #[cynic(rename = "blocks")]
173    Blocks,
174    #[cynic(rename = "duplicate")]
175    Duplicate,
176    #[cynic(rename = "related")]
177    Related,
178    #[cynic(rename = "similar")]
179    Similar,
180}
181
182#[derive(cynic::InputObject, Clone, Debug)]
183#[cynic(schema = "linear")]
184pub struct IssueRelationCreateInput {
185    #[cynic(rename = "issueId")]
186    pub issue_id: String,
187    #[cynic(rename = "relatedIssueId")]
188    pub related_issue_id: String,
189    #[cynic(rename = "type")]
190    pub relation_type: IssueRelationType,
191}
192
193#[derive(cynic::QueryFragment, Debug, Clone)]
194#[cynic(schema = "linear")]
195pub struct IssueRelationPayload {
196    pub success: bool,
197}
198
199#[derive(cynic::QueryVariables, Debug, Clone)]
200pub struct IssueRelationCreateArguments {
201    pub input: IssueRelationCreateInput,
202}
203
204#[derive(cynic::QueryFragment, Debug)]
205#[cynic(
206    graphql_type = "Mutation",
207    schema = "linear",
208    variables = "IssueRelationCreateArguments"
209)]
210pub struct IssueRelationCreateMutation {
211    #[arguments(input: $input)]
212    #[cynic(rename = "issueRelationCreate")]
213    pub issue_relation_create: IssueRelationPayload,
214}
215
216#[derive(cynic::QueryFragment, Debug, Clone)]
217#[cynic(schema = "linear")]
218pub struct DeletePayload {
219    pub success: bool,
220}
221
222#[derive(cynic::QueryVariables, Debug, Clone)]
223pub struct IssueRelationDeleteArguments {
224    pub id: String,
225}
226
227#[derive(cynic::QueryFragment, Debug)]
228#[cynic(
229    graphql_type = "Mutation",
230    schema = "linear",
231    variables = "IssueRelationDeleteArguments"
232)]
233pub struct IssueRelationDeleteMutation {
234    #[arguments(id: $id)]
235    #[cynic(rename = "issueRelationDelete")]
236    pub issue_relation_delete: DeletePayload,
237}