sql-orm 0.1.0

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

#[derive(AuditFields)]
struct Audit {
    #[orm(nullable)]
    updated_by: Option<String>,
}

#[derive(Entity, Debug, Clone)]
#[orm(table = "audited_entities", schema = "audit", audit = Audit)]
struct AuditedEntity {
    #[orm(primary_key)]
    #[orm(identity)]
    id: i64,

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

#[derive(Insertable)]
#[orm(entity = AuditedEntity)]
struct NewAuditedEntity {
    name: String,
}

#[derive(Changeset)]
#[orm(entity = AuditedEntity)]
struct AuditedEntityChanges {
    name: Option<String>,
}

#[derive(DbContext, Debug, Clone)]
struct AppDbContext {
    audited_entities: DbSet<AuditedEntity>,
}

struct PublicAuditProvider;

impl AuditProvider for PublicAuditProvider {
    fn values(&self, context: AuditContext<'_>) -> Result<Vec<ColumnValue>, OrmError> {
        let _entity = context.entity;
        let _operation = context.operation;
        let _request_values = context.request_values;

        Ok(vec![ColumnValue::new(
            "updated_by",
            SqlValue::String("public-provider".to_string()),
        )])
    }
}

fn main() {
    let provider: Arc<dyn AuditProvider> = Arc::new(PublicAuditProvider);
    let request_values = AuditRequestValues::new(vec![ColumnValue::new(
        "updated_by",
        SqlValue::String("public-request".to_string()),
    )]);

    let _with_provider = AppDbContext::with_audit_provider;
    let _with_request_values = AppDbContext::with_audit_request_values;
    let _clear_request_values = AppDbContext::clear_audit_request_values;
    let _shared_with_provider = SharedConnection::with_audit_provider;
    let _shared_with_request_values = SharedConnection::with_audit_request_values;
    let _shared_clear_request_values = SharedConnection::clear_audit_request_values;

    let context = AuditContext {
        entity: AuditedEntity::metadata(),
        operation: AuditOperation::Update,
        request_values: Some(&request_values),
    };

    let _resolved = resolve_audit_values(
        vec![ColumnValue::new(
            "name",
            SqlValue::String("explicit".to_string()),
        )],
        context,
        Some(provider.as_ref()),
    )
    .unwrap();
}