include_sql_helper/lib.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
//! This crate exports items that [include-sql](https://github.com/quietboil/include-sql), being a
//! proc-macro library, cannot export.
/// Pushes a list of values into the query argument list.
///
/// This is a helper function that `include-sql` uses when it generates `into_sql_with_args`.
///
pub fn push<'a,T: ?Sized>(arg: &[&'a T], param_prefix: &str, sql: &mut String, args: &mut Vec<&'a T>) {
let start = args.len() + 1;
let end = start + arg.len();
let range = start..end;
let mut iter = range.into_iter();
if let Some( n ) = iter.next() {
sql.push_str(param_prefix);
sql.push_str(&n.to_string());
for n in iter {
sql.push(',');
sql.push_str(param_prefix);
sql.push_str(&n.to_string());
}
}
args.extend_from_slice(arg);
}
/// Generates a macro that convers an argument struct into a slice that can be passed to
/// database interfaces that require the latter.
///
#[macro_export]
macro_rules! def_args {
($s:tt => $macro_name:ident : $args_struct:ident = $($field:ident),+) => {
#[allow(unused_macros)]
macro_rules! $macro_name {
($s($s name:ident : $s value:expr),+) => {{
let args = $args_struct { $s( $s name : $s value ),+ };
&[ $(args.$field),+ ]
}};
}
};
}