datacake-sqlite 0.5.0

A pre-built implementation of datacake's Storage trait using SQLite.
Documentation
use rusqlite::types::FromSql;
use rusqlite::Row;

use crate::db::FromRow;

fn inc(n: &mut usize) -> usize {
    let v = *n;
    (*n) = v + 1;
    v
}

macro_rules! derive_tuple {
    ($($field:ident)*) => {
        impl<$($field: FromSql,)*> FromRow for ($($field,)*) {
            fn from_row(row: &Row) -> rusqlite::Result<Self> {
                let mut cursor = 0;
                Ok((
                    $(
                        {
                            let _name = stringify!($field);
                            row.get(inc(&mut cursor))?
                        },
                    )*
                ))
            }
        }
    };
}

macro_rules! derive_common_tuples {
    () => {};
    ($first:ident $($rest:ident)*) => {
        derive_tuple!($first $($rest)*);
        derive_common_tuples!($($rest)*);
    };
}

derive_common_tuples!(T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15 T16);