#postgresql #tokio #mapper #mapping #row #proc-macro #structs

tokio-pg-mapper

用于将tokio-postgres行映射到Rust类型(结构体)的proc-macro库

9个版本

0.2.0 2021年1月4日
0.1.9 2020年12月31日
0.1.8 2020年5月26日
0.1.7 2020年3月26日
0.1.4 2020年1月11日

1032 in 数据库接口

Download history 1257/week @ 2023-12-11 1015/week @ 2023-12-18 416/week @ 2023-12-25 892/week @ 2024-01-01 1096/week @ 2024-01-08 1210/week @ 2024-01-15 1315/week @ 2024-01-22 1305/week @ 2024-01-29 1041/week @ 2024-02-05 1091/week @ 2024-02-12 1250/week @ 2024-02-19 1112/week @ 2024-02-26 1341/week @ 2024-03-04 1081/week @ 2024-03-11 1272/week @ 2024-03-18 1050/week @ 2024-03-25

4,830每月下载量
用于 3 crate

ISC许可

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-derivetokio-pg-mapper

许可

ISC。

依赖项

~8–19MB
~317K SLoC