taitan_orm_trait/location/
location_expr.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use crate::error::NotValidCmpError;
use crate::CmpOperator;
use log::warn;
use serde::{Deserialize, Serialize};
use std::str::Chars;

#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub struct LocationExpr<T> {
    pub val: T,
    pub cmp: CmpOperator,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub enum LogicalOperator {
    And,
    Or,
    Not,
}

impl<T> LocationExpr<T> {
    pub fn new(cmp: CmpOperator, val: T) -> Self {
        Self { cmp, val }
    }

    pub fn from(cmp: &str, val: T) -> Result<Self, NotValidCmpError> {
        let cmp = CmpOperator::from_str(cmp)?;
        Ok(Self { cmp, val })
    }

    pub fn get_cmp_sql(&self) -> &str {
        self.cmp.get_sql()
    }
}