use transistor::client::Crux;
use transistor::edn_rs::{ser_struct, Serialize};
use transistor::types::http::Action;
use transistor::types::{
error::CruxError,
{query::Query, CruxId},
};
fn main() -> Result<(), CruxError> {
let crux = Database {
crux__db___id: CruxId::new("crux"),
name: "Crux Datalog".to_string(),
is_sql: false,
};
let psql = Database {
crux__db___id: CruxId::new("postgres"),
name: "Postgres".to_string(),
is_sql: true,
};
let mysql = Database {
crux__db___id: CruxId::new("mysql"),
name: "MySQL".to_string(),
is_sql: true,
};
println!("{:?}", crux.clone().serialize());
println!("{:?}", psql.clone().serialize());
println!("{:?}", mysql.clone().serialize());
let client = Crux::new("localhost", "3000").http_client();
let action1 = Action::Put(crux.serialize());
let action2 = Action::Put(psql.serialize());
let action3 = Action::Put(mysql.serialize());
let _ = client.tx_log(vec![action1, action2, action3])?;
let query_is_sql = Query::find(vec!["?p1", "?n"])?
.where_clause(vec!["?p1 :name ?n", "?p1 :is-sql true"])?
.build();
let is_sql = client.query(query_is_sql?)?;
println!("{:?}", is_sql);
let query_is_no_sql = Query::find(vec!["?p1", "?n", "?s"])?
.where_clause(vec!["?p1 :name ?n", "?p1 :is-sql ?s", "?p1 :is-sql false"])?
.build();
let is_no_sql = client.query(query_is_no_sql?)?;
println!("{:?}", is_no_sql);
Ok(())
}
ser_struct! {
#[derive(Debug, Clone)]
#[allow(non_snake_case)]
pub struct Database {
crux__db___id: CruxId,
name: String,
is_sql: bool
}
}