#[allow(clippy::all)]
pub(crate) mod proto {
include!(concat!(env!("OUT_DIR"), "/proto.rs"));
}
pub use proto::google::firestore::v1::Value;
pub use proto::google::firestore::v1::MapValue;
pub use proto::google::firestore::v1::value::ValueType;
#[derive(Debug, Clone)]
pub enum FilterCondition {
Equal(String, Value),
LessThan(String, Value),
LessThanOrEqual(String, Value),
GreaterThan(String, Value),
GreaterThanOrEqual(String, Value),
ArrayContains(String, Value),
ArrayContainsAny(String, Vec<Value>),
In(String, Vec<Value>),
NotEqual(String, Value),
NotIn(String, Vec<Value>),
And(Vec<FilterCondition>),
Or(Vec<FilterCondition>),
}
impl FilterCondition {
pub fn field_path(&self) -> &str {
match self {
FilterCondition::Equal(field, _) => field,
FilterCondition::LessThan(field, _) => field,
FilterCondition::LessThanOrEqual(field, _) => field,
FilterCondition::GreaterThan(field, _) => field,
FilterCondition::GreaterThanOrEqual(field, _) => field,
FilterCondition::ArrayContains(field, _) => field,
FilterCondition::ArrayContainsAny(field, _) => field,
FilterCondition::In(field, _) => field,
FilterCondition::NotEqual(field, _) => field,
FilterCondition::NotIn(field, _) => field,
FilterCondition::And(_) | FilterCondition::Or(_) => "",
}
}
pub fn operator(&self) -> &'static str {
match self {
FilterCondition::Equal(_, _) => "EQUAL",
FilterCondition::LessThan(_, _) => "LESS_THAN",
FilterCondition::LessThanOrEqual(_, _) => "LESS_THAN_OR_EQUAL",
FilterCondition::GreaterThan(_, _) => "GREATER_THAN",
FilterCondition::GreaterThanOrEqual(_, _) => "GREATER_THAN_OR_EQUAL",
FilterCondition::ArrayContains(_, _) => "ARRAY_CONTAINS",
FilterCondition::ArrayContainsAny(_, _) => "ARRAY_CONTAINS_ANY",
FilterCondition::In(_, _) => "IN",
FilterCondition::NotEqual(_, _) => "NOT_EQUAL",
FilterCondition::NotIn(_, _) => "NOT_IN",
FilterCondition::And(_) => "AND",
FilterCondition::Or(_) => "OR",
}
}
}