triblespace 0.18.0

The Triblespace: A lightweight knowledge base for rust.
Documentation
use crate::entity;
use std::collections::HashSet;

use fake::faker::lorem::en::Sentence;
use fake::faker::lorem::en::Words;
use triblespace::prelude::*;

use fake::faker::name::raw::*;
use fake::locales::*;
use fake::Fake;
use triblespace::core::query::ContainsConstraint;
use triblespace::core::repo::BlobStorePut;

pub mod literature {
    use triblespace::prelude::*;

    attributes! {
        "8F180883F9FD5F787E9E0AF0DF5866B9" as author: valueschemas::GenId;
        "0DBB530B37B966D137C50B943700EDB2" as firstname: valueschemas::ShortString;
        "6BAA463FD4EAF45F6A103DB9433E4545" as lastname: valueschemas::ShortString;
        "A74AA63539354CDA47F387A4C3A8D54C" as title: valueschemas::ShortString;
        "FCCE870BECA333D059D5CD68C43B98F0" as page_count: valueschemas::R256;
        "6A03BAF6CFB822F04DA164ADAAEB53F6" as quote: valueschemas::Handle<valueschemas::Blake3, blobschemas::LongString>;
    }
}

fn main() {
    let mut kb = TribleSet::new();
    let mut mem_store = MemoryBlobStore::new();
    (0..1000000).for_each(|_| {
        let author = fucid();
        let book = fucid();
        kb += entity! { &author @
            literature::firstname: FirstName(EN).fake::<String>(),
            literature::lastname: LastName(EN).fake::<String>(),
        };
        kb += entity! { &book @
            literature::author: &author,
            literature::title: Words(1..3).fake::<Vec<String>>().join(" "),
            literature::quote: mem_store.put(Sentence(5..25).fake::<String>()).unwrap(),
        };
    });

    let author_names: HashSet<String, _> =
        HashSet::from_iter(["Frank", "Bob"].iter().map(|s| s.to_string()));

    let _result: Vec<_> = find!(
    (firstname: Value<_>, title: Value<_>, author: Value<_>, quote: Value<_>),
    and!(
        author_names.has(firstname),
        pattern!(&kb, [
        {?author @
            literature::firstname: ?firstname,
            literature::lastname: "Herbert"},
        { literature::author: ?author,
            literature::title: ?title,
            literature::quote: ?quote
        }]))
    )
    .collect();
}