4个版本
0.2.0 | 2021年1月4日 |
---|---|
0.1.6 |
|
0.1.5 | 2020年3月2日 |
0.1.4 | 2020年1月11日 |
0.1.0 | 2020年1月10日 |
在#mapper中排名第31
每月下载量约3,379
在6个crate中使用(直接使用5个)
8KB
159 行
tokio-pg-mapper
tokio_postgres-mapper
是一个进程宏,旨在使将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:包含Error
枚举和将tokio-postgres
Row
转换为无panic的特质的postgres-mapper
,以及包含进程宏的postgres-mapper-derive
。
安装
从crates.io安装tokio-pg-mapper-derive
和tokio-pg-mapper
许可证
ISC。
依赖
约8–18MB
约252K SLoC