sntl 0.1.0

Compile-time guarded ORM for PostgreSQL — your data's guardian from compile to production
Documentation
use sntl::Model;
use sntl::core::model::Model as ModelTrait;

#[derive(Model)]
#[sentinel(table = "posts")]
pub struct Post {
    #[sentinel(primary_key)]
    pub id: i64,

    pub title: String,

    pub body: String,

    #[sentinel(default = "false")]
    pub published: bool,
}

#[test]
fn column_constant_id() {
    let expr = Post::ID.eq(42i64);
    assert_eq!(expr.to_sql(1), "\"posts\".\"id\" = $1");
}

#[test]
fn column_constant_title() {
    let expr = Post::TITLE.eq("Hello");
    assert_eq!(expr.to_sql(1), "\"posts\".\"title\" = $1");
}

#[test]
fn column_constant_published() {
    let expr = Post::PUBLISHED.eq(true);
    assert_eq!(expr.to_sql(1), "\"posts\".\"published\" = $1");
}

#[test]
fn column_constants_compose() {
    let expr = Post::TITLE.like("%rust%").and(Post::PUBLISHED.eq(true));
    let sql = expr.to_sql(1);
    assert!(sql.contains("$1"));
    assert!(sql.contains("$2"));
}

#[test]
fn column_constants_in_select() {
    let q = Post::find().where_(Post::PUBLISHED.eq(true));
    let (sql, binds) = q.build();
    assert_eq!(
        sql,
        "SELECT \"posts\".* FROM \"posts\" WHERE \"posts\".\"published\" = $1"
    );
    assert_eq!(binds.len(), 1);
}