mintdb 0.1.0-beta.3

MintDB is an open source document based database built in Rust.
Documentation
use crate::kvs::store::Datastore;
use crate::prelude::*;
use serde_json::Value;
use serde_json::json;

impl Datastore {
    pub fn dfs<'a>(&self, tb: &str, doc: &str, rel: &str, target_doc: &str, visited: &'a mut Vec<Value>) -> Result<Option<Value>> {
        let lock = self.collections.try_read().unwrap();
        let children = match &lock.tables[tb].documents[doc].data[&f!("rel:{rel}")] {
            Value::Array(arr) => arr,
            _ => {
                return Ok(None);
            }
        };
        for child in children {
            let rel_doc = match child.get("doc") {
                Some(Value::String(str)) => str.as_str(),
                _ => continue
            };
            if rel_doc == target_doc {
                return Ok(Some(json!(&lock.tables[tb].documents[doc].data)))
            }
            if visited.contains(&json!(rel_doc)) {
                continue;
            } else {
                visited.push(json!(rel_doc));
            }
            let rel_tb = match child.get("tb") {
                Some(Value::String(str)) => str.as_str(),
                _ => continue
            };

            match self.dfs(rel_tb, rel_doc, &rel, target_doc, visited) {
                Ok(Some(val)) => return Ok(Some(val)),
                _ => continue
            };
        }
        Ok(None)
    }
}