deuterium 0.2.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 predicate::{Predicate, ToAbstractPredicate, RcPredicate};

use expression::{RawExpr};
use field::{
    OptionalBoolField,
    OptionalI8Field,
    OptionalI16Field,
    OptionalI32Field,
    OptionalI64Field,
    OptionalF32Field,
    OptionalF64Field,
    OptionalStringField,
    OptionalByteListField,
    OptionalJsonField,
    OptionalTimespecField,
    OptionalUuidField,
};

#[deriving(Clone)]
pub struct IsNullPredicate<F> {
    pub field: F,
    pub null: bool
}

pub trait ToIsNullPredicate {
    fn is_null(&self) -> RcPredicate;
    fn not_null(&self) -> RcPredicate;
}

macro_rules! impl_for(
    ($f:ty) => (

        impl Predicate for IsNullPredicate<$f> { }
        impl ToIsNullPredicate for $f {
            fn is_null(&self) -> RcPredicate {
                IsNullPredicate {
                    field: self.clone(),
                    null: true
                }.upcast()
            }

            fn not_null(&self) -> RcPredicate {
                IsNullPredicate {
                    field: self.clone(),
                    null: false
                }.upcast()
            }
        }

    )
)

impl_for!(OptionalBoolField)
impl_for!(OptionalI8Field)
impl_for!(OptionalI16Field)
impl_for!(OptionalI32Field)
impl_for!(OptionalI64Field)
impl_for!(OptionalF32Field)
impl_for!(OptionalF64Field)
impl_for!(OptionalStringField)
impl_for!(OptionalByteListField)
impl_for!(OptionalJsonField)
impl_for!(OptionalTimespecField)
impl_for!(OptionalUuidField)
impl_for!(RawExpr)