From 86294ebf5339d2146bd5cc132f21c34f094fcf0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Sat, 19 Jun 2021 15:54:32 +0200 Subject: [PATCH] create macros for common (type) inserts --- src/database.rs | 49 ++++++++++++++++++++----------- src/filesystem.rs | 75 ++++++++--------------------------------------- 2 files changed, 44 insertions(+), 80 deletions(-) diff --git a/src/database.rs b/src/database.rs index c7fc954..1213639 100644 --- a/src/database.rs +++ b/src/database.rs @@ -1,3 +1,4 @@ +#![macro_use] use crate::addressing::Address; use crate::hash::{decode, hash, Hash, Hashable}; use crate::models; @@ -41,6 +42,35 @@ lazy_static! { pub static ref TYPE_ADDR: Address = TYPE_INVARIANT.entity().unwrap(); } +#[macro_use] +mod macros { + macro_rules! upend_insert_val { + ($db_connection:expr, $entity:expr, $attribute:expr, $value:expr) => {{ + insert_entry( + $db_connection, + Entry { + entity: $entity.clone(), + attribute: String::from($attribute), + value: EntryValue::Value(serde_json::Value::from($value)), + }, + )?; + }}; + } + + macro_rules! upend_insert_addr { + ($db_connection:expr, $entity:expr, $attribute:expr, $addr:expr) => {{ + insert_entry( + $db_connection, + Entry { + entity: $entity.clone(), + attribute: String::from($attribute), + value: EntryValue::Address($addr.clone()), + }, + )?; + }}; + } +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Entry { pub entity: Address, @@ -741,22 +771,7 @@ pub fn open_upend>( fn initialize_types(pool: &DbPool) -> Result<()> { insert_entry(&pool.get()?, Entry::try_from(&*TYPE_INVARIANT)?)?; - insert_entry( - &pool.get()?, - Entry { - entity: TYPE_ADDR.clone(), - attribute: String::from(IS_OF_TYPE_ATTR), - value: EntryValue::Address(TYPE_ADDR.clone()), - }, - )?; - insert_entry( - &pool.get()?, - Entry { - entity: TYPE_ADDR.clone(), - attribute: String::from(TYPE_ID_ATTR), - value: EntryValue::Value(serde_json::Value::from(TYPE_IS_ATTR)), - }, - )?; - + upend_insert_addr!(&pool.get()?, TYPE_ADDR, IS_OF_TYPE_ATTR, TYPE_ADDR); + upend_insert_val!(&pool.get()?, TYPE_ADDR, TYPE_ID_ATTR, TYPE_IS_ATTR); Ok(()) } diff --git a/src/filesystem.rs b/src/filesystem.rs index fb28d54..9417e9e 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -59,76 +59,25 @@ lazy_static! { fn initialize_types(pool: &DbPool) -> Result<()> { // BLOB_TYPE insert_entry(&pool.get()?, Entry::try_from(&*BLOB_TYPE_INVARIANT)?)?; - insert_entry( - &pool.get()?, - Entry { - entity: BLOB_TYPE_ADDR.clone(), - attribute: String::from(IS_OF_TYPE_ATTR), - value: EntryValue::Address(TYPE_ADDR.clone()), - }, - )?; - insert_entry( - &pool.get()?, - Entry { - entity: BLOB_TYPE_ADDR.clone(), - attribute: String::from(TYPE_INSTANCED_ATTR), - value: EntryValue::Value(Value::from(FILE_TYPE)), - }, - )?; + upend_insert_addr!(&pool.get()?, BLOB_TYPE_ADDR, IS_OF_TYPE_ATTR, TYPE_ADDR); + upend_insert_val!(&pool.get()?, BLOB_TYPE_ADDR, TYPE_INSTANCED_ATTR, FILE_TYPE); // FILE_TYPE insert_entry(&pool.get()?, Entry::try_from(&*FILE_TYPE_INVARIANT)?)?; - insert_entry( + upend_insert_addr!(&pool.get()?, FILE_TYPE_ADDR, IS_OF_TYPE_ATTR, TYPE_ADDR); + upend_insert_val!(&pool.get()?, FILE_TYPE_ADDR, TYPE_ID_ATTR, FILENAME_KEY); + upend_insert_val!( &pool.get()?, - Entry { - entity: FILE_TYPE_ADDR.clone(), - attribute: String::from(IS_OF_TYPE_ATTR), - value: EntryValue::Address(TYPE_ADDR.clone()), - }, - )?; - insert_entry( - &pool.get()?, - Entry { - entity: FILE_TYPE_ADDR.clone(), - attribute: String::from(TYPE_ID_ATTR), - value: EntryValue::Value(Value::from(FILENAME_KEY)), - }, - )?; - insert_entry( - &pool.get()?, - Entry { - entity: FILE_TYPE_ADDR.clone(), - attribute: String::from(TYPE_REQUIRES_ATTR), - value: EntryValue::Value(Value::from(FILE_IDENTITY_KEY)), - }, - )?; - insert_entry( - &pool.get()?, - Entry { - entity: FILE_TYPE_ADDR.clone(), - attribute: String::from(TYPE_HAS_ATTR), - value: EntryValue::Value(Value::from(FILE_MIME_KEY)), - }, - )?; + FILE_TYPE_ADDR, + TYPE_REQUIRES_ATTR, + FILE_IDENTITY_KEY + ); + upend_insert_val!(&pool.get()?, FILE_TYPE_ADDR, TYPE_HAS_ATTR, FILE_MIME_KEY); // DIR_TYPE insert_entry(&pool.get()?, Entry::try_from(&*DIR_TYPE_INVARIANT)?)?; - insert_entry( - &pool.get()?, - Entry { - entity: DIR_TYPE_ADDR.clone(), - attribute: String::from(IS_OF_TYPE_ATTR), - value: EntryValue::Address(TYPE_ADDR.clone()), - }, - )?; - insert_entry( - &pool.get()?, - Entry { - entity: DIR_TYPE_ADDR.clone(), - attribute: String::from(TYPE_ID_ATTR), - value: EntryValue::Value(Value::from(DIR_KEY)), - }, - )?; + upend_insert_addr!(&pool.get()?, DIR_TYPE_ADDR, IS_OF_TYPE_ATTR, TYPE_ADDR); + upend_insert_val!(&pool.get()?, DIR_TYPE_ADDR, TYPE_ID_ATTR, DIR_KEY); Ok(()) }