1use serde::{Deserialize, Serialize};
72
73#[derive(Debug, Clone, Serialize, Deserialize, Default)]
74pub struct CheckboxFilterItem {
75 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
76 pub equals: Option<bool>,
77 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
78 pub does_not_equal: Option<bool>,
79}
80
81impl CheckboxFilterItem {
82 pub fn equals() -> Self {
83 CheckboxFilterItem {
84 equals: Some(true),
85 ..Default::default()
86 }
87 }
88
89 pub fn does_not_equal() -> Self {
90 CheckboxFilterItem {
91 does_not_equal: Some(true),
92 ..Default::default()
93 }
94 }
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, Default)]
98pub struct DateFilterItem {
99 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
100 pub after: Option<String>,
101 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
102 pub before: Option<String>,
103 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
104 pub equals: Option<String>,
105 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
106 pub is_empty: Option<bool>,
107 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
108 pub is_not_empty: Option<bool>,
109 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
110 pub on_or_after: Option<String>,
111 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
112 pub on_or_before: Option<String>,
113}
114
115impl DateFilterItem {
116 pub fn equals(value: String) -> Self {
117 DateFilterItem {
118 equals: Some(value.to_string()),
119 ..Default::default()
120 }
121 }
122
123 pub fn after(value: String) -> Self {
124 DateFilterItem {
125 after: Some(value.to_string()),
126 ..Default::default()
127 }
128 }
129
130 pub fn before(value: String) -> Self {
131 DateFilterItem {
132 before: Some(value.to_string()),
133 ..Default::default()
134 }
135 }
136
137 pub fn is_empty() -> Self {
138 DateFilterItem {
139 is_empty: Some(true),
140 ..Default::default()
141 }
142 }
143
144 pub fn is_not_empty() -> Self {
145 DateFilterItem {
146 is_not_empty: Some(true),
147 ..Default::default()
148 }
149 }
150
151 pub fn on_or_after(value: String) -> Self {
152 DateFilterItem {
153 on_or_after: Some(value.to_string()),
154 ..Default::default()
155 }
156 }
157
158 pub fn on_or_before(value: String) -> Self {
159 DateFilterItem {
160 on_or_before: Some(value.to_string()),
161 ..Default::default()
162 }
163 }
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize, Default)]
167pub struct FilesFilterItem {
168 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
169 pub is_empty: Option<bool>,
170 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
171 pub is_not_empty: Option<bool>,
172}
173
174impl FilesFilterItem {
175 pub fn is_empty() -> Self {
176 FilesFilterItem {
177 is_empty: Some(true),
178 ..Default::default()
179 }
180 }
181
182 pub fn is_not_empty() -> Self {
183 FilesFilterItem {
184 is_not_empty: Some(true),
185 ..Default::default()
186 }
187 }
188}
189
190#[derive(Debug, Clone, Serialize, Deserialize, Default)]
191pub struct FormulaFilterItem {
192 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
193 pub checkbox: Option<CheckboxFilterItem>,
194 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
195 pub date: Option<DateFilterItem>,
196 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
197 pub number: Option<NumberFilterItem>,
198 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
199 pub string: Option<RichTextFilterItem>,
200}
201
202impl FormulaFilterItem {
203 pub fn checkbox(item: CheckboxFilterItem) -> Self {
204 FormulaFilterItem {
205 checkbox: Some(item),
206 ..Default::default()
207 }
208 }
209
210 pub fn date(item: DateFilterItem) -> Self {
211 FormulaFilterItem {
212 date: Some(item),
213 ..Default::default()
214 }
215 }
216
217 pub fn number(item: NumberFilterItem) -> Self {
218 FormulaFilterItem {
219 number: Some(item),
220 ..Default::default()
221 }
222 }
223
224 pub fn string(item: RichTextFilterItem) -> Self {
225 FormulaFilterItem {
226 string: Some(item),
227 ..Default::default()
228 }
229 }
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize, Default)]
233pub struct MultiSelectFilterItem {
234 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
235 pub contains: Option<String>,
236 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
237 pub does_not_contain: Option<String>,
238 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
239 pub equals: Option<bool>,
240 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
241 pub does_not_equal: Option<bool>,
242}
243
244impl MultiSelectFilterItem {
245 pub fn contains(value: String) -> Self {
246 MultiSelectFilterItem {
247 contains: Some(value.to_string()),
248 ..Default::default()
249 }
250 }
251
252 pub fn does_not_contain(value: String) -> Self {
253 MultiSelectFilterItem {
254 does_not_contain: Some(value.to_string()),
255 ..Default::default()
256 }
257 }
258
259 pub fn equals() -> Self {
260 MultiSelectFilterItem {
261 equals: Some(true),
262 ..Default::default()
263 }
264 }
265
266 pub fn does_not_equal() -> Self {
267 MultiSelectFilterItem {
268 does_not_equal: Some(true),
269 ..Default::default()
270 }
271 }
272}
273
274#[derive(Debug, Clone, Serialize, Deserialize, Default)]
275pub struct NumberFilterItem {
276 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
277 pub equals: Option<u128>,
278 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
279 pub does_not_equal: Option<u128>,
280 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
281 pub greater_than: Option<u128>,
282 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
283 pub less_than: Option<u128>,
284 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
285 pub greater_than_or_equal_to: Option<u128>,
286 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
287 pub less_than_or_equal_to: Option<u128>,
288 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
289 pub is_empty: Option<bool>,
290 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
291 pub is_not_empty: Option<bool>,
292}
293
294impl NumberFilterItem {
295 pub fn equals(value: u128) -> Self {
296 NumberFilterItem {
297 equals: Some(value),
298 ..Default::default()
299 }
300 }
301
302 pub fn does_not_equal(value: u128) -> Self {
303 NumberFilterItem {
304 does_not_equal: Some(value),
305 ..Default::default()
306 }
307 }
308
309 pub fn greater_than(value: u128) -> Self {
310 NumberFilterItem {
311 greater_than: Some(value),
312 ..Default::default()
313 }
314 }
315
316 pub fn less_than(value: u128) -> Self {
317 NumberFilterItem {
318 less_than: Some(value),
319 ..Default::default()
320 }
321 }
322
323 pub fn greater_than_or_equal_to(value: u128) -> Self {
324 NumberFilterItem {
325 greater_than_or_equal_to: Some(value),
326 ..Default::default()
327 }
328 }
329
330 pub fn less_than_or_equal_to(value: u128) -> Self {
331 NumberFilterItem {
332 less_than_or_equal_to: Some(value),
333 ..Default::default()
334 }
335 }
336
337 pub fn is_empty() -> Self {
338 NumberFilterItem {
339 is_empty: Some(true),
340 ..Default::default()
341 }
342 }
343
344 pub fn is_not_empty() -> Self {
345 NumberFilterItem {
346 is_not_empty: Some(true),
347 ..Default::default()
348 }
349 }
350}
351
352#[derive(Debug, Clone, Serialize, Deserialize, Default)]
353pub struct PeopleFilterItem {
354 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
355 pub contains: Option<String>,
356 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
357 pub does_not_contain: Option<String>,
358 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
359 pub is_empty: Option<bool>,
360 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
361 pub is_not_empty: Option<bool>,
362}
363
364impl PeopleFilterItem {
365 pub fn contains(value: String) -> Self {
366 PeopleFilterItem {
367 contains: Some(value.to_string()),
368 ..Default::default()
369 }
370 }
371
372 pub fn does_not_contain(value: String) -> Self {
373 PeopleFilterItem {
374 does_not_contain: Some(value.to_string()),
375 ..Default::default()
376 }
377 }
378
379 pub fn is_empty() -> Self {
380 PeopleFilterItem {
381 is_empty: Some(true),
382 ..Default::default()
383 }
384 }
385
386 pub fn is_not_empty() -> Self {
387 PeopleFilterItem {
388 is_not_empty: Some(true),
389 ..Default::default()
390 }
391 }
392}
393
394#[derive(Debug, Clone, Serialize, Deserialize, Default)]
395pub struct RelationFilterItem {
396 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
397 pub contains: Option<String>,
398 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
399 pub does_not_contain: Option<String>,
400 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
401 pub is_empty: Option<bool>,
402 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
403 pub is_not_empty: Option<bool>,
404}
405
406impl RelationFilterItem {
407 pub fn contains(value: String) -> Self {
408 RelationFilterItem {
409 contains: Some(value.to_string()),
410 ..Default::default()
411 }
412 }
413
414 pub fn does_not_contain(value: String) -> Self {
415 RelationFilterItem {
416 does_not_contain: Some(value.to_string()),
417 ..Default::default()
418 }
419 }
420
421 pub fn is_empty() -> Self {
422 RelationFilterItem {
423 is_empty: Some(true),
424 ..Default::default()
425 }
426 }
427
428 pub fn is_not_empty() -> Self {
429 RelationFilterItem {
430 is_not_empty: Some(true),
431 ..Default::default()
432 }
433 }
434}
435
436#[derive(Debug, Clone, Serialize, Deserialize, Default)]
437pub struct RichTextFilterItem {
438 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
439 pub contains: Option<String>,
440 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
441 pub does_not_contain: Option<String>,
442 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
443 pub equals: Option<String>,
444 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
445 pub does_not_equal: Option<String>,
446 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
447 pub starts_with: Option<String>,
448 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
449 pub ends_with: Option<String>,
450 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
451 pub is_empty: Option<bool>,
452 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
453 pub is_not_empty: Option<bool>,
454}
455
456impl RichTextFilterItem {
457 pub fn contains(value: String) -> Self {
458 RichTextFilterItem {
459 contains: Some(value.to_string()),
460 ..Default::default()
461 }
462 }
463
464 pub fn does_not_contain(value: String) -> Self {
465 RichTextFilterItem {
466 does_not_contain: Some(value.to_string()),
467 ..Default::default()
468 }
469 }
470
471 pub fn equals(value: String) -> Self {
472 RichTextFilterItem {
473 equals: Some(value.to_string()),
474 ..Default::default()
475 }
476 }
477
478 pub fn does_not_equal(value: String) -> Self {
479 RichTextFilterItem {
480 does_not_equal: Some(value.to_string()),
481 ..Default::default()
482 }
483 }
484
485 pub fn starts_with(value: String) -> Self {
486 RichTextFilterItem {
487 starts_with: Some(value.to_string()),
488 ..Default::default()
489 }
490 }
491
492 pub fn ends_with(value: String) -> Self {
493 RichTextFilterItem {
494 ends_with: Some(value.to_string()),
495 ..Default::default()
496 }
497 }
498
499 pub fn is_empty() -> Self {
500 RichTextFilterItem {
501 is_empty: Some(true),
502 ..Default::default()
503 }
504 }
505
506 pub fn is_not_empty() -> Self {
507 RichTextFilterItem {
508 is_not_empty: Some(true),
509 ..Default::default()
510 }
511 }
512}
513
514#[derive(Debug, Clone, Serialize, Deserialize, Default)]
515pub struct SelectFilterItem {
516 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
517 pub equals: Option<String>,
518 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
519 pub does_not_equals: Option<String>,
520 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
521 pub is_empty: Option<bool>,
522 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
523 pub is_not_empty: Option<bool>,
524}
525
526impl SelectFilterItem {
527 pub fn equals(value: String) -> Self {
528 SelectFilterItem {
529 equals: Some(value.to_string()),
530 ..Default::default()
531 }
532 }
533
534 pub fn does_not_equals(value: String) -> Self {
535 SelectFilterItem {
536 does_not_equals: Some(value.to_string()),
537 ..Default::default()
538 }
539 }
540
541 pub fn is_empty() -> Self {
542 SelectFilterItem {
543 is_empty: Some(true),
544 ..Default::default()
545 }
546 }
547
548 pub fn is_not_empty() -> Self {
549 SelectFilterItem {
550 is_not_empty: Some(true),
551 ..Default::default()
552 }
553 }
554}
555
556#[derive(Debug, Clone, Serialize, Deserialize, Default)]
557pub struct StatusFilterItem {
558 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
559 pub equals: Option<String>,
560 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
561 pub does_not_equals: Option<String>,
562 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
563 pub is_empty: Option<bool>,
564 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
565 pub is_not_empty: Option<bool>,
566}
567
568impl StatusFilterItem {
569 pub fn equals(value: String) -> Self {
570 StatusFilterItem {
571 equals: Some(value.to_string()),
572 ..Default::default()
573 }
574 }
575
576 pub fn does_not_equals(value: String) -> Self {
577 StatusFilterItem {
578 does_not_equals: Some(value.to_string()),
579 ..Default::default()
580 }
581 }
582
583 pub fn is_empty() -> Self {
584 StatusFilterItem {
585 is_empty: Some(true),
586 ..Default::default()
587 }
588 }
589
590 pub fn is_not_empty() -> Self {
591 StatusFilterItem {
592 is_not_empty: Some(true),
593 ..Default::default()
594 }
595 }
596}
597
598#[derive(Debug, Clone, Serialize, Deserialize, Default)]
599pub struct TimestampFilterItem {
600 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
601 pub timestamp: Option<String>,
602 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
603 pub created_time: Option<DateFilterItem>,
604 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
605 pub last_edited_time: Option<DateFilterItem>,
606}
607
608impl TimestampFilterItem {
609 pub fn timestamp(value: String) -> Self {
610 TimestampFilterItem {
611 timestamp: Some(value.to_string()),
612 ..Default::default()
613 }
614 }
615
616 pub fn created_time(item: DateFilterItem) -> Self {
617 TimestampFilterItem {
618 created_time: Some(item),
619 ..Default::default()
620 }
621 }
622
623 pub fn last_edited_time(item: DateFilterItem) -> Self {
624 TimestampFilterItem {
625 last_edited_time: Some(item),
626 ..Default::default()
627 }
628 }
629}
630
631#[derive(Debug, Clone, Serialize, Deserialize, Default)]
632pub struct IdFilterItem {
633 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
634 pub equals: Option<u128>,
635 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
636 pub does_not_equal: Option<u128>,
637 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
638 pub greater_than: Option<u128>,
639 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
640 pub less_than: Option<u128>,
641 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
642 pub greater_than_or_equal_to: Option<u128>,
643 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
644 pub less_than_or_equal_to: Option<u128>,
645}
646
647impl IdFilterItem {
648 pub fn equals(value: u128) -> Self {
649 IdFilterItem {
650 equals: Some(value),
651 ..Default::default()
652 }
653 }
654
655 pub fn does_not_equal(value: u128) -> Self {
656 IdFilterItem {
657 does_not_equal: Some(value),
658 ..Default::default()
659 }
660 }
661
662 pub fn greater_than(value: u128) -> Self {
663 IdFilterItem {
664 greater_than: Some(value),
665 ..Default::default()
666 }
667 }
668
669 pub fn less_than(value: u128) -> Self {
670 IdFilterItem {
671 less_than: Some(value),
672 ..Default::default()
673 }
674 }
675
676 pub fn greater_than_or_equal_to(value: u128) -> Self {
677 IdFilterItem {
678 greater_than_or_equal_to: Some(value),
679 ..Default::default()
680 }
681 }
682
683 pub fn less_than_or_equal_to(value: u128) -> Self {
684 IdFilterItem {
685 less_than_or_equal_to: Some(value),
686 ..Default::default()
687 }
688 }
689}
690
691#[derive(Debug, Clone, Serialize, Deserialize, Default)]
692pub struct FilterItem {
693 #[serde(default = "String::new", skip_serializing_if = "String::is_empty")]
694 pub property: String,
695 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
696 pub and: Option<Vec<FilterItem>>,
697 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
698 pub or: Option<Vec<FilterItem>>,
699 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
700 pub checkbox: Option<CheckboxFilterItem>,
701 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
702 pub date: Option<DateFilterItem>,
703 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
704 pub files: Option<FilesFilterItem>,
705 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
706 pub formula: Option<FormulaFilterItem>,
707 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
708 pub multi_select: Option<MultiSelectFilterItem>,
709 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
710 pub number: Option<NumberFilterItem>,
711 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
712 pub people: Option<PeopleFilterItem>,
713 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
714 pub relation: Option<RelationFilterItem>,
715 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
716 pub rich_text: Option<RichTextFilterItem>,
717 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
718 pub select: Option<SelectFilterItem>,
719 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
720 pub status: Option<StatusFilterItem>,
721 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
722 pub timestamp: Option<TimestampFilterItem>,
723 #[serde(default = "Option::default", skip_serializing_if = "Option::is_none")]
724 pub id: Option<IdFilterItem>,
725}
726
727impl FilterItem {
728 pub fn and(items: Vec<FilterItem>) -> Self {
729 FilterItem {
730 and: Some(items),
731 ..Default::default()
732 }
733 }
734
735 pub fn or(items: Vec<FilterItem>) -> Self {
736 FilterItem {
737 or: Some(items),
738 ..Default::default()
739 }
740 }
741
742 pub fn checkbox(property: String, item: CheckboxFilterItem) -> Self {
743 FilterItem {
744 property: property.to_string(),
745 checkbox: Some(item),
746 ..Default::default()
747 }
748 }
749
750 pub fn date(property: String, item: DateFilterItem) -> Self {
751 FilterItem {
752 property: property.to_string(),
753 date: Some(item),
754 ..Default::default()
755 }
756 }
757
758 pub fn files(property: String, item: FilesFilterItem) -> Self {
759 FilterItem {
760 property: property.to_string(),
761 files: Some(item),
762 ..Default::default()
763 }
764 }
765
766 pub fn formula(property: String, item: FormulaFilterItem) -> Self {
767 FilterItem {
768 property: property.to_string(),
769 formula: Some(item),
770 ..Default::default()
771 }
772 }
773
774 pub fn multi_select(property: String, item: MultiSelectFilterItem) -> Self {
775 FilterItem {
776 property: property.to_string(),
777 multi_select: Some(item),
778 ..Default::default()
779 }
780 }
781
782 pub fn number(property: String, item: NumberFilterItem) -> Self {
783 FilterItem {
784 property: property.to_string(),
785 number: Some(item),
786 ..Default::default()
787 }
788 }
789
790 pub fn people(property: String, item: PeopleFilterItem) -> Self {
791 FilterItem {
792 property: property.to_string(),
793 people: Some(item),
794 ..Default::default()
795 }
796 }
797
798 pub fn relation(property: String, item: RelationFilterItem) -> Self {
799 FilterItem {
800 property: property.to_string(),
801 relation: Some(item),
802 ..Default::default()
803 }
804 }
805
806 pub fn rich_text(property: String, item: RichTextFilterItem) -> Self {
807 FilterItem {
808 property: property.to_string(),
809 rich_text: Some(item),
810 ..Default::default()
811 }
812 }
813
814 pub fn select(property: String, item: SelectFilterItem) -> Self {
815 FilterItem {
816 property: property.to_string(),
817 select: Some(item),
818 ..Default::default()
819 }
820 }
821
822 pub fn status(property: String, item: StatusFilterItem) -> Self {
823 FilterItem {
824 property: property.to_string(),
825 status: Some(item),
826 ..Default::default()
827 }
828 }
829
830 pub fn timestamp(property: String, item: TimestampFilterItem) -> Self {
831 FilterItem {
832 property: property.to_string(),
833 timestamp: Some(item),
834 ..Default::default()
835 }
836 }
837
838 pub fn id(property: String, item: IdFilterItem) -> Self {
839 FilterItem {
840 property: property.to_string(),
841 id: Some(item),
842 ..Default::default()
843 }
844 }
845}
846
847#[derive(Debug, Clone, Serialize, Deserialize)]
848pub struct QueryFilter {
849 pub filter: FilterItem,
850 #[serde(default = "String::new", skip_serializing_if = "String::is_empty")]
851 pub start_cursor: String,
852}
853
854impl QueryFilter {
855 pub fn new() -> Self {
856 QueryFilter {
857 filter: FilterItem::default(),
858 start_cursor: String::new(),
859 }
860 }
861
862 pub fn args(&mut self, item: FilterItem) {
863 self.filter = item;
864 }
865
866 pub fn and(&mut self, items: Vec<FilterItem>) {
867 self.filter.and = Some(items);
868 }
869
870 pub fn or(&mut self, items: Vec<FilterItem>) {
871 self.filter.or = Some(items);
872 }
873
874 pub fn build(&self) -> String {
875 serde_json::to_string(self).unwrap()
876 }
877}