sql-orm 0.1.0

Public API crate for the sql-orm workspace.
Documentation
use sql_orm::prelude::*;

#[derive(SoftDeleteFields)]
struct SoftDeleteColumns {
    #[orm(sql_type = "datetime2")]
    deleted_at: Option<String>,

    #[orm(nullable)]
    #[orm(length = 120)]
    deleted_by: Option<String>,
}

#[derive(Entity, Debug, Clone)]
#[orm(
    table = "soft_deleted_entities",
    schema = "audit",
    soft_delete = SoftDeleteColumns
)]
struct SoftDeletedEntity {
    #[orm(primary_key)]
    #[orm(identity)]
    id: i64,

    #[orm(length = 120)]
    name: String,
}

fn main() {
    let metadata = SoftDeletedEntity::metadata();
    assert_eq!(metadata.columns.len(), 4);
    assert_eq!(metadata.columns[2].column_name, "deleted_at");
    assert_eq!(metadata.columns[3].column_name, "deleted_by");

    let soft_delete = SoftDeletedEntity::soft_delete_policy().expect("soft delete policy");
    assert_eq!(soft_delete.name, "soft_delete");
    assert_eq!(soft_delete.columns.len(), 2);
    assert_eq!(soft_delete.columns[0].column_name, "deleted_at");
    assert!(!soft_delete.columns[0].insertable);
    assert!(soft_delete.columns[0].updatable);
    assert_eq!(soft_delete.columns[1].column_name, "deleted_by");

    let metadata = SoftDeleteColumns::metadata();
    assert_eq!(metadata.name, "soft_delete");
}