| Crates.io | dsq-filter |
| lib.rs | dsq-filter |
| version | 0.1.0 |
| created_at | 2025-12-15 17:55:28.591705+00 |
| updated_at | 2025-12-15 17:55:28.591705+00 |
| description | Filter system for dsq that operates at the AST level |
| homepage | https://datasetq.com |
| repository | https://github.com/durableprogramming/dsq |
| max_upload_size | |
| id | 1986457 |
| size | 262,475 |
Filter system for DSQ that operates at the AST level, evaluating parsed queries against data.
dsq-filter is the execution engine for DSQ queries. It takes an Abstract Syntax Tree (AST) produced by dsq-parser and evaluates it against data structures, producing filtered and transformed results. The filter system supports both in-memory operations and DataFrame-based operations using Polars.
Add this to your Cargo.toml:
[dependencies]
dsq-filter = "0.1"
use dsq_filter::execute_filter;
use dsq_shared::value::Value;
fn main() {
let data = r#"{"name": "Alice", "age": 30}"#;
let value = Value::from_json(serde_json::from_str(data).unwrap());
let result = execute_filter(".name", &value).expect("Filter failed");
println!("Result: {:?}", result);
}
use dsq_filter::execute_dataframe_filter;
use polars::prelude::*;
fn main() {
// Create a DataFrame
let df = df! {
"name" => ["Alice", "Bob", "Charlie"],
"age" => [30, 25, 35],
}.unwrap();
// Filter using DSQ syntax
let result = execute_dataframe_filter(".[] | select(.age > 26)", df)
.expect("Filter failed");
println!("{:?}", result);
}
use dsq_filter::execute_filter;
use dsq_shared::value::Value;
fn main() {
let data = r#"[
{"name": "Alice", "age": 30, "city": "NYC"},
{"name": "Bob", "age": 25, "city": "LA"},
{"name": "Charlie", "age": 35, "city": "NYC"}
]"#;
let value = Value::from_json(serde_json::from_str(data).unwrap());
// Complex query with filtering and transformation
let query = ".[] | select(.city == \"NYC\") | {name, age}";
let result = execute_filter(query, &value).expect("Filter failed");
println!("NYC residents: {:?}", result);
}
The filter system supports:
select(), map(), reject()group_by(), sort_by(), unique()+, -, *, /, %==, !=, <, >, <=, >=and, or, notsplit(), join(), contains(), startswith(), endswith()length, first, last, reverse, flattenFor detailed API documentation, see docs.rs/dsq-filter.
The filter system is designed for performance:
Contributions are welcome! Please see the CONTRIBUTING.md file in the repository root for guidelines.
Licensed under either of:
at your option.