diff --git a/src/data/attr.rs b/src/data/attr.rs index 3c9db15d..cd2a92b7 100644 --- a/src/data/attr.rs +++ b/src/data/attr.rs @@ -7,6 +7,7 @@ use anyhow::Result; use rmp_serde::Serializer; use serde::Serialize; use serde_derive::{Deserialize, Serialize}; +use serde_json::json; use smallvec::SmallVec; use std::fmt::{Display, Formatter}; @@ -288,6 +289,16 @@ impl Attribute { pub(crate) fn decode(data: &[u8]) -> Result { Ok(rmp_serde::from_slice(data)?) } + pub(crate) fn to_json(&self) -> serde_json::Value { + json!({ + "id": self.id.0, + "keyword": self.keyword.to_string(), + "cardinality": self.cardinality.to_string(), + "type": self.val_type.to_string(), + "index": self.indexing.to_string(), + "history": self.with_history + }) + } } #[cfg(test)] diff --git a/src/lib.rs b/src/lib.rs index b02c5f35..3050a496 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,4 +11,4 @@ pub(crate) mod transact; pub(crate) mod utils; pub use data::tx_attr::AttrTxItem; -pub use runtime::instance::Db; +pub use runtime::db::Db; diff --git a/src/runtime/instance.rs b/src/runtime/db.rs similarity index 95% rename from src/runtime/instance.rs rename to src/runtime/db.rs index 96036393..d1eaa521 100644 --- a/src/runtime/instance.rs +++ b/src/runtime/db.rs @@ -4,6 +4,7 @@ use crate::runtime::transact::SessionTx; use crate::AttrTxItem; use anyhow::Result; use cozorocks::{DbBuilder, DbIter, RocksDb}; +use itertools::Itertools; use std::fmt::{Debug, Formatter}; use std::sync::atomic::{AtomicU64, AtomicUsize, Ordering}; use std::sync::Arc; @@ -123,4 +124,8 @@ impl Db { tx.commit_tx(&comment, false)?; Ok(()) } + pub fn current_schema(&self) -> Result { + let mut tx = self.transact()?; + tx.all_attrs().map_ok(|v| v.to_json()).try_collect() + } } diff --git a/src/runtime/mod.rs b/src/runtime/mod.rs index 5ddcb08b..36676f2f 100644 --- a/src/runtime/mod.rs +++ b/src/runtime/mod.rs @@ -1,2 +1,2 @@ -pub(crate) mod instance; +pub(crate) mod db; pub(crate) mod transact; diff --git a/tests/creation.rs b/tests/creation.rs index b1b90e0c..4eedf980 100644 --- a/tests/creation.rs +++ b/tests/creation.rs @@ -16,6 +16,7 @@ fn test_send_sync(_: &T) {} fn creation() { let db = create_db("_test_db"); test_send_sync(&db); + dbg!(db.current_schema().unwrap().to_string()); // let current_validity = Validity::current(); // let session = db.new_session().unwrap(); // let mut tx = session.transact().unwrap();