use bigdecimal::BigDecimal;
use chrono::{DateTime, NaiveDate, NaiveTime, Utc};
use thiserror::Error;
use uuid::Uuid;
pub use crate::odata_parse::parse_str;
#[derive(Clone, Debug, Error, PartialEq, Eq)]
pub enum ParseError {
#[error("Error during general parsing: {0}")]
Parsing(String),
#[error("Error parsing a UUID.")]
ParsingUuid,
#[error("Error parsing a number.")]
ParsingNumber,
#[error("Error parsing a date.")]
ParsingDate,
#[error("Error parsing a time.")]
ParsingTime,
#[error("Error parsing a date and time.")]
ParsingDateTime,
#[error("Error parsing a time zone offset.")]
ParsingTimeZone,
#[error("Error parsing a named time zone.")]
ParsingTimeZoneNamed,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Expr {
Or(Box<Expr>, Box<Expr>),
And(Box<Expr>, Box<Expr>),
Not(Box<Expr>),
Compare(Box<Expr>, CompareOperator, Box<Expr>),
In(Box<Expr>, Vec<Expr>),
Function(String, Vec<Expr>),
Identifier(String),
Value(Value),
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum CompareOperator {
Equal,
NotEqual,
GreaterThan,
GreaterOrEqual,
LessThan,
LessOrEqual,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Value {
Null,
Bool(bool),
Number(BigDecimal),
Uuid(Uuid),
DateTime(DateTime<Utc>),
Date(NaiveDate),
Time(NaiveTime),
String(String),
}