9个版本
0.2.0 | 2021年1月4日 |
---|---|
0.1.9 |
|
0.1.8 | 2020年5月26日 |
0.1.7 | 2020年3月26日 |
0.1.4 | 2020年1月11日 |
1032 in 数据库接口
4,830每月下载量
用于 3 crate
11KB
57 行
tokio-pg-mapper
tokio_postgres-mapper
是一个proc-macro,旨在使将postgresql表映射到结构体的过程变得简单。
为什么?
编写大量样板代码并最终重复代码,从postgresql行映射到结构体,可能会令人沮丧。
例如,某人可能会通常编写以下内容
extern crate postgres;
use postgres::rows::Row;
pub struct User {
pub id: i64,
pub name: String,
pub email: Option<String>,
}
impl From<Row> for User {
fn from(row: Row) -> Self {
Self {
id: row.get("id"),
name: row.get("name"),
email: row.get("email"),
}
}
}
// code to execute a query here and get back a row
let user = User::from(row); // this can panic
当使用非panic的get_opt
方法变体手动实现时,这会变得更糟。
使用这个crate,可以去除样板代码,并推导出panic和非panic实现
extern crate tokio_pg_mapper_derive;
extern crate tokio_pg_mapper;
use tokio_pg_mapper::FromTokioPostgresRow;
use tokio_pg_mapper_derive::PostgresMapper;
#[derive(PostgresMapper)]
pub struct User {
pub id: i64,
pub name: String,
pub email: Option<String>,
}
// Code to execute a query here and get back a row might now look like:
let stmt = "SELECT * FROM user WHERE username = $1 AND password = $2";
let result = client.query_one(stmt, &[&5, "asdf"]).await?;
let user = User::from_row(result).unwrap(); // or from_row_ref(&result)
两个crate
此存储库包含两个crate:postgres-mapper
,其中包含一个Error
枚举和用于从tokio-postgres
Row
无panic转换的特质,以及postgres-mapper-derive
,其中包含proc-macro。
安装
从crates.io安装tokio-pg-mapper-derive
和tokio-pg-mapper
许可
ISC。
依赖项
~8–19MB
~317K SLoC