datacake_sqlite/
from_row_impl.rs

1use rusqlite::types::FromSql;
2use rusqlite::Row;
3
4use crate::db::FromRow;
5
6fn inc(n: &mut usize) -> usize {
7    let v = *n;
8    (*n) = v + 1;
9    v
10}
11
12macro_rules! derive_tuple {
13    ($($field:ident)*) => {
14        impl<$($field: FromSql,)*> FromRow for ($($field,)*) {
15            fn from_row(row: &Row) -> rusqlite::Result<Self> {
16                let mut cursor = 0;
17                Ok((
18                    $(
19                        {
20                            let _name = stringify!($field);
21                            row.get(inc(&mut cursor))?
22                        },
23                    )*
24                ))
25            }
26        }
27    };
28}
29
30macro_rules! derive_common_tuples {
31    () => {};
32    ($first:ident $($rest:ident)*) => {
33        derive_tuple!($first $($rest)*);
34        derive_common_tuples!($($rest)*);
35    };
36}
37
38derive_common_tuples!(T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15 T16);