Trait structsy::Operators

source ·
pub trait Operators<F> {
    // Required methods
    fn or<FN: Fn(F) -> F>(self, builder: FN) -> Self;
    fn and<FN: Fn(F) -> F>(self, builder: FN) -> Self;
    fn not<FN: Fn(F) -> F>(self, builder: FN) -> Self;
}
Expand description

And/Or/Not Operators

Example

use structsy::{ Structsy, StructsyTx, StructsyError, Operators};
use structsy_derive::{queries, Persistent};
#[derive(Persistent)]
struct Basic {
    name: String,
}
impl Basic {
    fn new(name: &str) -> Basic {
        Basic { name: name.to_string() }
    }
}

#[queries(Basic)]
trait BasicQuery {
     fn by_name(self, name: String) -> Self;
}


fn basic_query() -> Result<(), StructsyError> {
    let structsy = Structsy::open("file.structsy")?;
    structsy.define::<Basic>()?;
    let mut tx = structsy.begin()?;
    tx.insert(&Basic::new("aaa"))?;
    tx.insert(&Basic::new("bbb"))?;
    tx.commit()?;
    let count = structsy.query::<Basic>().or(|or| {
            or.by_name("aaa".to_string()).by_name("bbb".to_string())
        }).fetch().count();
    assert_eq!(count, 2);
    let count = structsy.query::<Basic>().not(|not| {
            not.by_name("aaa".to_string())
        }).fetch().count();
    assert_eq!(count, 1);
    let count = structsy.query::<Basic>().and(|and| {
            and.by_name("aaa".to_string()).by_name("bbb".to_string())
        }).fetch().count();
    assert_eq!(count, 0);
    Ok(())
}

Required Methods§

source

fn or<FN: Fn(F) -> F>(self, builder: FN) -> Self

source

fn and<FN: Fn(F) -> F>(self, builder: FN) -> Self

source

fn not<FN: Fn(F) -> F>(self, builder: FN) -> Self

Implementors§

source§

impl<T: EmbeddedDescription + 'static, Q: EmbeddedQuery<T>> Operators<Filter<T>> for Q