Lucene Query Builder Derive

A procmacro derive crate to generate lucene query builder for Rust structs :

Usage :

```rust use lucenequerybuilder::QueryBuilder;

[derive(QueryBuilder)]

struct Person { name: String, age: i32, } ```

Simple query

```rust let query = Person::query_builder() .name("Bob") .or() .name("Alice") .build();

asserteq!(query, "query=name:Bob OR name:Alice".tostring()); ```

Nested query

```rust let query = Person::querybuilder() .expr(Person::querybuilder().name("Bob").or().name("Alice")) .and() .age("22") .build();

asserteq!( query, "query=(name:Bob OR name:Alice) AND age:22".tostring() ); ```

Range query

```rust let query = Person::querybuilder().agerange("7", "77").build();

asserteq!(query, "query=age:[7 TO 77]".tostring()); ```

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, #[querybuilderrename = "fullname"] complete_name: String, } ```

```rust let query = Person::query_builder() .name("Bob") .and() .fullname("Bob Marley") .build();

asserteq!( query, "query=name:Bob AND completename:\"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, #[querybuilderrename = "fullname"] #[querybuilderfield = "fullname"] complete_name: String, } ```

```rust let query = Person::query_builder() .name("Bob") .and() .fullname("Bob Marley") .build();

asserteq!( query, "query=name:Bob AND fullname:\"Bob Marley\"".tostring() ); ```

Ignore fields

If you need to ignore a field use the attribute macro : #[query_builder_ignore]