ruroonga_expr 0.2.0

A tiny Groonga expression builder and generator.
Documentation
extern crate ruroonga_expr as expr;

use expr::dsl::*;

fn logical_and_expr() {
    let lexpr = fulltext_expr("Rust").column("language").prepare().unwrap();
    let rexpr = fulltext_expr("Haskell").column("language").prepare().unwrap();
    let comb_lexpr = greater_equal_expr("n_likes", "10").prepare();
    let result = (comb_lexpr % (lexpr + rexpr)).build();
    println!("Grouped Logical And: {}", result);
}

fn logical_or_expr() {
    let lexpr = fulltext_expr("Rust").column("language").prepare().unwrap();
    let rexpr = fulltext_expr("Haskell").column("language").prepare().unwrap();
    let comb_lexpr = greater_equal_expr("n_likes", "10").prepare();
    let result = (comb_lexpr % (lexpr | rexpr)).build();
    println!("Grouped Logical OR: {}", result);
}

fn logical_not_expr() {
    let lexpr = fulltext_expr("Rust").column("language").prepare().unwrap();
    let rexpr = fulltext_expr("Haskell").column("language").prepare().unwrap();
    let comb_lexpr = greater_equal_expr("n_likes", "10").prepare();
    let result = (comb_lexpr % (lexpr - rexpr)).build();
    println!("Grouped Logical Not: {}", result);
}

fn nested_logicals_expr() {
    use expr::groupable::Groupable;

    let llexpr = phrase_expr("Rust lang").column("language").prepare().unwrap();
    let lrexpr = phrase_expr("Haskell lang").column("language").prepare().unwrap();
    let lcomb_lexpr = greater_equal_expr("n_likes", "10").prepare();
    let llogical_expr = lcomb_lexpr % (llexpr | lrexpr);
    assert_eq!(concat!("\'n_likes:>=10 ",
                       "(language:@\"Rust lang\" OR language:@\"Haskell lang\")\'"),
               llogical_expr.clone().build());

    let rlexpr = phrase_expr("Ruby lang").column("language").prepare().unwrap();
    let rrexpr = phrase_expr("Python lang").column("language").prepare().unwrap();
    let rcomb_lexpr = greater_equal_expr("n_likes", "10").prepare();
    let rlogical_expr = rcomb_lexpr % (rlexpr | rrexpr);
    assert_eq!(concat!("\'n_likes:>=10 ",
                       "(language:@\"Ruby lang\" OR language:@\"Python lang\")\'"),
               rlogical_expr.clone().build());

    let result = logical::and(llogical_expr.to_group(),
                              rlogical_expr.to_group()).build();
    println!("Nested logicals expr: {}", result);
}

fn main() {
    logical_and_expr();
    logical_or_expr();
    logical_not_expr();
    nested_logicals_expr();
}