https://github.com/oknozor/lucene_query_builder_rs
A procmacro derive crate to create lucene query from rust struct.
https://github.com/oknozor/lucene_query_builder_rs
Last synced: 3 months ago
JSON representation
A procmacro derive crate to create lucene query from rust struct.
- Host: GitHub
- URL: https://github.com/oknozor/lucene_query_builder_rs
- Owner: oknozor
- License: mit
- Created: 2019-12-11T15:26:37.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-07-14T10:39:27.000Z (almost 4 years ago)
- Last Synced: 2025-02-02T00:31:50.996Z (3 months ago)
- Language: Rust
- Size: 23.4 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Lucene Query Builder Derive
A procmacro derive crate to generate lucene query builder for Rust structs :
## Usage :
```rust
use lucene_query_builder::QueryBuilder;#[derive(QueryBuilder)]
struct Person {
name: String,
age: i32,
}
```### Simple query
```rust
let query = Person::query_builder()
.name("Bob")
.or()
.name("Alice")
.build();assert_eq!(query, "query=name:Bob OR name:Alice".to_string());
```### Nested query
```rust
let query = Person::query_builder()
.expr(Person::query_builder().name("Bob").or().name("Alice"))
.and()
.age("22")
.build();assert_eq!(
query,
"query=(name:Bob OR name:Alice) AND age:22".to_string()
);
```### Range query
```rust
let query = Person::query_builder().age_range("7", "77").build();assert_eq!(query, "query=age:[7 TO 77]".to_string());
```### Rename builder functions and field names
Use `#[query_builder_rename = "name"]` if you need to rename the generated method :
```rust
#[derive(QueryBuilder)]
struct Person {
name: String,
age: i32,
#[query_builder_rename = "fullname"]
complete_name: String,
}
``````rust
let query = Person::query_builder()
.name("Bob")
.and()
.fullname("Bob Marley")
.build();assert_eq!(
query,
"query=name:Bob AND complete_name:\"Bob Marley\"".to_string()
);
```If you need to rename the generated lucene field you can use `#[query_builder_field = "name"]. `
```rust
#[derive(QueryBuilder)]
struct Person {
name: String,
age: i32,
#[query_builder_rename = "fullname"]
#[query_builder_field = "fullname"]
complete_name: String,
}
``````rust
let query = Person::query_builder()
.name("Bob")
.and()
.fullname("Bob Marley")
.build();assert_eq!(
query,
"query=name:Bob AND fullname:\"Bob Marley\"".to_string()
);
```### Ignore fields
If you need to ignore a field use the attribute macro : `#[query_builder_ignore]`