Crates.io | serde-sqlx |
lib.rs | serde-sqlx |
version | 0.0.1 |
source | src |
created_at | 2025-03-19 18:11:30.623435+00 |
updated_at | 2025-03-19 18:11:30.623435+00 |
description | Allows deserializing Postgres rows into Rust types using serde |
homepage | |
repository | https://github.com/vrmiguel/serde-sqlx |
max_upload_size | |
id | 1598433 |
size | 49,958 |
Allows deserializing Postgres rows into Rust types using serde
. Work in progress.
Simple Primitives:
Structs and Tuples:
Optional Values:
JSON and JSONB:
Newtypes:
struct UserId(i32)
)PostgreSQL Arrays:
Add serde-sqlx
to your Cargo.toml:
[dependencies]
serde-sqlx = "0.1"
serde = { version = "1", features = ["derive"] }
sqlx = { version = "0.6", features = ["postgres", "runtime-tokio-native-tls"] }
Basic example:
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct User {
id: i32,
name: String,
active: bool,
profile: Option<Profile>,
}
#[derive(Deserialize, Debug)]
struct Profile {
bio: String,
age: i32,
}
async fn get_users(pool: &PgPool) -> anyhow::Result<Vec<User>> {
let rows = sqlx::query(
"SELECT id, name, active, profile::JSONB FROM users"
).fetch_all(pool).await?;
let users: Result<Vec<_>, _> = rows.into_iter()
.map(serde_sqlx::from_pg_row)
.collect();
users.map_err(Into::into)
}