versatile_data/search/
enums.rs

1use crate::{Activity, FieldName};
2use std::{
3    ops::RangeInclusive,
4    sync::Arc,
5    time::{SystemTime, UNIX_EPOCH},
6};
7
8#[derive(Clone, Debug, PartialEq)]
9pub enum Term {
10    In(u64),
11    Past(u64),
12    Future(u64),
13}
14
15impl Default for Term {
16    fn default() -> Self {
17        Self::In(
18            SystemTime::now()
19                .duration_since(UNIX_EPOCH)
20                .unwrap()
21                .as_secs(),
22        )
23    }
24}
25
26#[derive(Debug, Clone, PartialEq)]
27pub enum Number {
28    Min(isize),
29    Max(isize),
30    Range(RangeInclusive<isize>),
31    In(Vec<isize>),
32}
33
34#[derive(Debug, Clone, PartialEq)]
35pub enum Field {
36    Match(Vec<u8>),
37    Range(Vec<u8>, Vec<u8>),
38    Min(Vec<u8>),
39    Max(Vec<u8>),
40    Forward(Arc<String>),
41    Partial(Arc<String>),
42    Backward(Arc<String>),
43    ValueForward(Arc<String>),
44    ValueBackward(Arc<String>),
45    ValuePartial(Arc<String>),
46}
47
48#[derive(Debug)]
49pub enum Condition<'a> {
50    Activity(Activity),
51    Term(Term),
52    Row(&'a Number),
53    Uuid(&'a [u128]),
54    LastUpdated(&'a Number),
55    Field(FieldName, &'a Field),
56    Narrow(&'a Vec<Condition<'a>>),
57    Wide(&'a Vec<Condition<'a>>),
58}