tank 0.32.0

Tank (Table Abstraction and Navigation Kit): the Rust data layer. Simple and flexible ORM that allows to manage in a unified way data from different sources.
Documentation
#[cfg(test)]
mod tests {
    use std::collections::HashSet;
    use tank::{ColumnRef, Entity};

    #[test]
    fn test_column_conversions() {
        #[derive(Entity)]
        #[tank(schema = "the_schema", name = "my_table")]
        struct Entity {
            #[tank(name = "solo_column")]
            col: i32,
        }

        let column = &Entity::columns()[0];
        assert_eq!(column.name(), "solo_column");
        assert_eq!(column.table(), "my_table");
        assert_eq!(column.schema(), "the_schema");

        let col_ref: &ColumnRef = column.into();
        assert_eq!(col_ref.name, "solo_column");
        assert_eq!(col_ref.table, "my_table");
        assert_eq!(col_ref.schema, "the_schema");

        let my_column = ColumnRef::new("my_column".into());
        assert_eq!(my_column.name, "my_column");
        assert_eq!(my_column.table, "");
        assert_eq!(my_column.schema, "");
    }

    #[test]
    fn test_column_ref_table() {
        let col = ColumnRef {
            name: "id".into(),
            table: "users".into(),
            schema: "public".into(),
        };
        let table = col.table();
        assert_eq!(table.name, "users");
        assert_eq!(table.schema, "public");
        assert_eq!(table.alias, "");
    }

    #[test]
    fn test_column_def_equality_and_hash() {
        #[derive(Entity)]
        struct TestTable {
            id: i32,
            name: String,
        }
        let cols = TestTable::columns();
        assert_ne!(cols[0], cols[1]);
        assert_eq!(cols[0], cols[0]);
        let mut set = HashSet::new();
        set.insert(&cols[0]);
        set.insert(&cols[1]);
        assert_eq!(set.len(), 2);
        set.insert(&cols[0]);
        assert_eq!(set.len(), 2);
    }
}