create macros for common (type) inserts

feat/vaults
Tomáš Mládek 2021-06-19 15:54:32 +02:00
parent 841dc7c07b
commit 86294ebf53
2 changed files with 44 additions and 80 deletions

View File

@ -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<P: AsRef<Path>>(
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(())
}

View File

@ -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(())
}