deuterium 0.1.1

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 function::{
    Sum, SumArg,
    Min, MinArg,
    Max, MaxArg,
    Avg, AvgArg,
    Count, CountArg,
    CountAll
};

use sql::{SqlContext, ToSql};

macro_rules! agg_to_sql(
    ($foo:ident, $foo_arg:ident, $fmt:expr) => (
        impl<R, T, E> ToSql for $foo<R, T, E> where R: Clone, T: Clone, E: $foo_arg<R, T> {
            fn to_sql(&self, ctx: &mut SqlContext) -> String {
                format!($fmt, self.expression.expression_as_sql().to_sql(ctx))
            }    
        }
    )
)

agg_to_sql!(Sum, SumArg, "SUM({})")
agg_to_sql!(Min, MinArg, "MIN({})")
agg_to_sql!(Max, MaxArg, "MAX({})")
agg_to_sql!(Avg, AvgArg, "AVG({})")
agg_to_sql!(Count, CountArg, "COUNT({})")

impl ToSql for CountAll {
    fn to_sql(&self, _ctx: &mut SqlContext) -> String {
        "COUNT(*)".to_string()
    }    
}