An open API service indexing awesome lists of open source software.

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.

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]`