linear_queries/
filters.rs

1use crate::scalars::DateTimeOrDuration;
2use linear_schema::linear as schema;
3
4#[derive(cynic::InputObject, Clone, Debug, Default)]
5#[cynic(schema = "linear")]
6pub struct StringComparator {
7    #[cynic(skip_serializing_if = "Option::is_none")]
8    pub eq: Option<String>,
9    #[cynic(skip_serializing_if = "Option::is_none")]
10    pub contains: Option<String>,
11    #[cynic(rename = "containsIgnoreCase", skip_serializing_if = "Option::is_none")]
12    pub contains_ignore_case: Option<String>,
13}
14
15#[derive(cynic::InputObject, Clone, Debug, Default)]
16#[cynic(schema = "linear")]
17pub struct NullableStringComparator {
18    #[cynic(skip_serializing_if = "Option::is_none")]
19    pub eq: Option<String>,
20    #[cynic(skip_serializing_if = "Option::is_none")]
21    pub contains: Option<String>,
22    #[cynic(rename = "containsIgnoreCase", skip_serializing_if = "Option::is_none")]
23    pub contains_ignore_case: Option<String>,
24}
25
26#[derive(cynic::InputObject, Clone, Debug, Default)]
27#[cynic(schema = "linear")]
28pub struct NullableNumberComparator {
29    #[cynic(skip_serializing_if = "Option::is_none")]
30    pub eq: Option<f64>,
31    #[cynic(skip_serializing_if = "Option::is_none")]
32    pub gte: Option<f64>,
33    #[cynic(skip_serializing_if = "Option::is_none")]
34    pub lte: Option<f64>,
35}
36
37#[derive(cynic::InputObject, Clone, Debug, Default)]
38#[cynic(schema = "linear")]
39pub struct NumberComparator {
40    #[cynic(skip_serializing_if = "Option::is_none")]
41    pub eq: Option<f64>,
42    #[cynic(skip_serializing_if = "Option::is_none")]
43    pub gte: Option<f64>,
44    #[cynic(skip_serializing_if = "Option::is_none")]
45    pub lte: Option<f64>,
46}
47
48/// ID comparator for filtering by entity IDs
49#[derive(cynic::InputObject, Clone, Debug, Default)]
50#[cynic(schema = "linear", graphql_type = "IDComparator")]
51pub struct IdComparator {
52    #[cynic(skip_serializing_if = "Option::is_none")]
53    pub eq: Option<cynic::Id>,
54}
55
56/// Date comparator for filtering by date ranges
57#[derive(cynic::InputObject, Clone, Debug, Default)]
58#[cynic(schema = "linear")]
59pub struct DateComparator {
60    #[cynic(skip_serializing_if = "Option::is_none")]
61    pub eq: Option<DateTimeOrDuration>,
62    #[cynic(skip_serializing_if = "Option::is_none")]
63    pub gte: Option<DateTimeOrDuration>,
64    #[cynic(skip_serializing_if = "Option::is_none")]
65    pub lte: Option<DateTimeOrDuration>,
66}
67
68/// Filter for workflow state (by ID)
69#[derive(cynic::InputObject, Clone, Debug, Default)]
70#[cynic(schema = "linear")]
71pub struct WorkflowStateFilter {
72    #[cynic(skip_serializing_if = "Option::is_none")]
73    pub id: Option<IdComparator>,
74}
75
76/// Filter for nullable user fields (by ID)
77#[derive(cynic::InputObject, Clone, Debug, Default)]
78#[cynic(schema = "linear")]
79pub struct NullableUserFilter {
80    #[cynic(skip_serializing_if = "Option::is_none")]
81    pub id: Option<IdComparator>,
82}
83
84/// Filter for team (by ID or key)
85#[derive(cynic::InputObject, Clone, Debug, Default)]
86#[cynic(schema = "linear")]
87pub struct TeamFilter {
88    #[cynic(skip_serializing_if = "Option::is_none")]
89    pub id: Option<IdComparator>,
90    #[cynic(skip_serializing_if = "Option::is_none")]
91    pub key: Option<StringComparator>,
92}
93
94/// Filter for nullable project fields (by ID)
95#[derive(cynic::InputObject, Clone, Debug, Default)]
96#[cynic(schema = "linear")]
97pub struct NullableProjectFilter {
98    #[cynic(skip_serializing_if = "Option::is_none")]
99    pub id: Option<IdComparator>,
100}
101
102#[derive(cynic::InputObject, Clone, Debug, Default)]
103#[cynic(schema = "linear")]
104pub struct IssueFilter {
105    #[cynic(skip_serializing_if = "Option::is_none")]
106    pub title: Option<StringComparator>,
107    #[cynic(skip_serializing_if = "Option::is_none")]
108    pub description: Option<NullableStringComparator>,
109    #[cynic(skip_serializing_if = "Option::is_none")]
110    pub priority: Option<NullableNumberComparator>,
111    #[cynic(skip_serializing_if = "Option::is_none")]
112    pub state: Option<WorkflowStateFilter>,
113    #[cynic(skip_serializing_if = "Option::is_none")]
114    pub assignee: Option<NullableUserFilter>,
115    #[cynic(skip_serializing_if = "Option::is_none")]
116    pub team: Option<TeamFilter>,
117    #[cynic(skip_serializing_if = "Option::is_none")]
118    pub project: Option<NullableProjectFilter>,
119    #[cynic(rename = "createdAt", skip_serializing_if = "Option::is_none")]
120    pub created_at: Option<DateComparator>,
121    #[cynic(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
122    pub updated_at: Option<DateComparator>,
123    #[cynic(skip_serializing_if = "Option::is_none")]
124    pub number: Option<NumberComparator>,
125}