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    pub eq: Option<String>,
8    pub contains: Option<String>,
9    #[cynic(rename = "containsIgnoreCase")]
10    pub contains_ignore_case: Option<String>,
11}
12
13#[derive(cynic::InputObject, Clone, Debug, Default)]
14#[cynic(schema = "linear")]
15pub struct NullableStringComparator {
16    pub eq: Option<String>,
17    pub contains: Option<String>,
18    #[cynic(rename = "containsIgnoreCase")]
19    pub contains_ignore_case: Option<String>,
20}
21
22#[derive(cynic::InputObject, Clone, Debug, Default)]
23#[cynic(schema = "linear")]
24pub struct NullableNumberComparator {
25    pub eq: Option<f64>,
26    pub gte: Option<f64>,
27    pub lte: Option<f64>,
28}
29
30#[derive(cynic::InputObject, Clone, Debug, Default)]
31#[cynic(schema = "linear")]
32pub struct NumberComparator {
33    pub eq: Option<f64>,
34    pub gte: Option<f64>,
35    pub lte: Option<f64>,
36}
37
38/// ID comparator for filtering by entity IDs
39#[derive(cynic::InputObject, Clone, Debug, Default)]
40#[cynic(schema = "linear", graphql_type = "IDComparator")]
41pub struct IdComparator {
42    pub eq: Option<cynic::Id>,
43}
44
45/// Date comparator for filtering by date ranges
46#[derive(cynic::InputObject, Clone, Debug, Default)]
47#[cynic(schema = "linear")]
48pub struct DateComparator {
49    pub eq: Option<DateTimeOrDuration>,
50    pub gte: Option<DateTimeOrDuration>,
51    pub lte: Option<DateTimeOrDuration>,
52}
53
54/// Filter for workflow state (by ID)
55#[derive(cynic::InputObject, Clone, Debug, Default)]
56#[cynic(schema = "linear")]
57pub struct WorkflowStateFilter {
58    pub id: Option<IdComparator>,
59}
60
61/// Filter for nullable user fields (by ID)
62#[derive(cynic::InputObject, Clone, Debug, Default)]
63#[cynic(schema = "linear")]
64pub struct NullableUserFilter {
65    pub id: Option<IdComparator>,
66}
67
68/// Filter for team (by ID or key)
69#[derive(cynic::InputObject, Clone, Debug, Default)]
70#[cynic(schema = "linear")]
71pub struct TeamFilter {
72    pub id: Option<IdComparator>,
73    pub key: Option<StringComparator>,
74}
75
76/// Filter for nullable project fields (by ID)
77#[derive(cynic::InputObject, Clone, Debug, Default)]
78#[cynic(schema = "linear")]
79pub struct NullableProjectFilter {
80    pub id: Option<IdComparator>,
81}
82
83#[derive(cynic::InputObject, Clone, Debug, Default)]
84#[cynic(schema = "linear")]
85pub struct IssueFilter {
86    pub title: Option<StringComparator>,
87    pub description: Option<NullableStringComparator>,
88    pub priority: Option<NullableNumberComparator>,
89    pub state: Option<WorkflowStateFilter>,
90    pub assignee: Option<NullableUserFilter>,
91    pub team: Option<TeamFilter>,
92    pub project: Option<NullableProjectFilter>,
93    #[cynic(rename = "createdAt")]
94    pub created_at: Option<DateComparator>,
95    #[cynic(rename = "updatedAt")]
96    pub updated_at: Option<DateComparator>,
97    pub number: Option<NumberComparator>,
98}