sqlx-meta

Crates.iosqlx-meta
lib.rssqlx-meta
version0.1.0
sourcesrc
created_at2022-12-18 16:23:29.034228
updated_at2022-12-18 16:23:29.034228
descriptionDerive macro for SQLx to get metadata about the entity such as column names
homepage
repositoryhttps://github.com/rusty-ferris-club/sqlx-meta
max_upload_size
id740482
size4,805
Dotan J. Nahum (jondot)

documentation

https://docs.rs/sqlx-meta

README

Sqlx Meta

A library derived as a slim version of sqlx-crud to provide metadata about the entity it marks, design to only provide the building blocks for you to build your own queries.

Getting started

Add to your dependencies:

sqlx-meta = "0.1.0"

And mark your entity with SqlxMeta:

#[derive(Default, Debug, Clone, sqlx::FromRow, SqlxMeta)]
pub struct File {
    pub id: Option<i32>,
    pub entry_time: String,
    pub abs_path: String,
    pub path: String,
    pub ext: Option<String>,
    pub mode: Option<String>,
    // ..
}

Build your own query (prefer lazy_static when it doesn't really change):

lazy_static! {
    static ref INSERT_SQL: String = {
        let cols = &File::columns()[1..];

        let holders = (0..cols.len()).map(|_| "?").collect::<Vec<_>>().join(", ");

        let excludes = cols
            .iter()
            .map(|c| format!("'{}'=excluded.'{}'", c, c))
            .collect::<Vec<_>>()
            .join(",");
        // ..
        // ..

Use the update_binds or insert_binds methods to save up typing:

use sqlx_meta::{Binds, Schema};
f.update_binds(q).fetch_optional(&mut conn).await?;
Commit count: 2

cargo fmt