datacake_sqlite/
from_row_impl.rs1use 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);