deuterium 0.2.0

Deuterium is a fancy SQL builder for Rust. It's designed to provide a DSL to easily build SQL queries in safe and *typed* way.
use deuterium::*;

#[test]
fn insert_default() {
    let jedi_table = TableDef::new("jedi");
    assert_sql!(jedi_table.insert_all(), "INSERT INTO jedi DEFAULT VALUES;")
}

#[test]
fn insert() {

    let jedi_table = TableDef::new("jedi");
    let name = NamedField::<String>::field_of("name", &jedi_table);
    let side = NamedField::<bool>::field_of("side", &jedi_table);

    let mut query = jedi_table.insert_fields(&[&name, &side]);
    query.push_untyped(&[&"Luke".to_string(), &true]);
    assert_sql!(query, "INSERT INTO jedi (name, side) VALUES\n    ($1, $2);");

    let mut query = jedi_table.insert_1_for_test(&name);
    query.push((ExprValue::new(&"Luke".to_string()), ));
    query.push((ExprValue::Default, ));

    assert_sql!(query, "INSERT INTO jedi (name) VALUES\n    ($1),\n    (DEFAULT);");
}

#[test]
fn insert_returning() {

    let jedi_table = TableDef::new("jedi");
    let name = NamedField::<String>::field_of("name", &jedi_table);
    let side = NamedField::<bool>::field_of("side", &jedi_table);

    let mut query = jedi_table.insert_fields(&[&name, &side]).returning_1(&name.qual());
    query.push_untyped(&[&"Luke".to_string(), &true]);
    assert_sql!(query, "INSERT INTO jedi (name, side) VALUES\n    ($1, $2) RETURNING jedi.name;");
}