Crates.io | sqlx-derive-with |
lib.rs | sqlx-derive-with |
version | 0.1.0 |
source | src |
created_at | 2022-08-06 11:25:08.10129 |
updated_at | 2022-08-06 11:25:08.10129 |
description | Derive sqlx::FromRow specific to the given database |
homepage | https://github.com/eagletmt/sqlx-derive-with |
repository | https://github.com/eagletmt/sqlx-derive-with |
max_upload_size | |
id | 639815 |
size | 19,355 |
Derive sqlx::FromRow
specific to the given database.
sqlx-derive-with supports decode
attribute to use custom decoder function to specific columns.
This feature is not (and unable to be, I think) supported by upstream sqlx::FromRow
.
use sqlx::Connection as _;
#[derive(sqlx_derive_with::FromRow)]
#[sqlx_with(db = "sqlx::Sqlite")]
struct Row {
#[sqlx_with(decode = "split_x")]
x: (i64, i64),
y: String,
}
fn split_x(index: &str, row: &sqlx::sqlite::SqliteRow) -> sqlx::Result<(i64, i64)> {
use sqlx::Row as _;
let n: i64 = row.try_get(index)?;
Ok((n, n + 2))
}
#[tokio::main]
async fn main() {
let mut conn = sqlx::SqliteConnection::connect(":memory:").await.unwrap();
let row: Row = sqlx::query_as("select 10 as x, 'hello' as y")
.fetch_one(&mut conn)
.await
.unwrap();
assert_eq!(row.x, (10, 12));
assert_eq!(row.y, "hello");
}