use redis_vl::BetweenInclusivity;
use redis_vl::filter::{Geo, GeoRadius, Num, Tag, Text, Timestamp};
fn main() {
let color = Tag::new("color").eq("red");
println!("Tag filter: {color}");
let colors = Tag::new("color").one_of(["red", "blue", "green"]);
println!("Tag multi: {colors}");
let not_red = Tag::new("color").ne("red");
println!("Tag ne: {not_red}");
let cheap = Num::new("price").lt(50.0);
println!("\nNum lt: {cheap}");
let range = Num::new("price").between(10.0, 100.0, BetweenInclusivity::Both);
println!("Num between: {range}");
let exact = Num::new("quantity").eq(42.0);
println!("Num eq: {exact}");
let text = Text::new("description").eq("premium");
println!("\nText eq: {text}");
let like = Text::new("description").like("pre*");
println!("Text like: {like}");
let geo = Geo::new("location").eq(GeoRadius::new(-122.4194, 37.7749, 10.0, "km"));
println!("\nGeo: {geo}");
let recent = Timestamp::new("created_at").gte(1_700_000_000.0);
println!("\nTimestamp: {recent}");
let and_filter = Tag::new("color").eq("red") & Num::new("price").lt(100.0);
println!("\nAND: {and_filter}");
let or_filter = Text::new("title").eq("sale") | Text::new("title").eq("discount");
println!("OR: {or_filter}");
let not_filter = !Tag::new("status").eq("archived");
println!("NOT: {not_filter}");
let complex = (Tag::new("category").eq("electronics") & Num::new("price").lt(500.0))
| (Tag::new("category").eq("books") & Num::new("price").lt(30.0));
println!("\nComplex: {complex}");
}