include_sql_helper/
lib.rs

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