pub mod elements; pub mod peers; #[macro_export] macro_rules! build_query { ($payload:expr, $params:expr) => { { // Build parameters map let mut params_map: BTreeMap = Default::default(); let mut parameters_init = String::new(); if $params.len() > 0 { for (name, value) in $params { let _: &str = name; // only for type annotation params_map.insert(name.to_string(), value); } // First line: Initialize parameters, make them available in CozoScript use itertools::Itertools; parameters_init += "?["; parameters_init += ¶ms_map.iter().map(|(name, _)| name).format(", ").to_string(); parameters_init += "] <- [["; parameters_init += ¶ms_map.iter().map(|(name, _)| format!("${}", name)).format(", ").to_string(); parameters_init += "]]"; } // Return query string and parameters map ( format!("{}\n\n{}", parameters_init, $payload), params_map ) } }; } use build_query; #[macro_export] macro_rules! run_query { ($db:expr, $payload:expr, $params:expr, $mutability:expr) => { { let (query, parameters) = crate::state::queries::build_query!($payload, $params); $db.run_script(query.as_str(), parameters, $mutability) } }; }