#mapper #postgresql #tokio

tokio-pg-mapper-derive

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

4个版本

0.2.0 2021年1月4日
0.1.6 2020年12月30日
0.1.5 2020年3月2日
0.1.4 2020年1月11日
0.1.0 2020年1月10日

#mapper中排名第31

Download history 948/week @ 2024-03-26 1361/week @ 2024-04-02 976/week @ 2024-04-09 1269/week @ 2024-04-16 1138/week @ 2024-04-23 1102/week @ 2024-04-30 1034/week @ 2024-05-07 929/week @ 2024-05-14 879/week @ 2024-05-21 974/week @ 2024-05-28 1004/week @ 2024-06-04 913/week @ 2024-06-11 830/week @ 2024-06-18 1021/week @ 2024-06-25 535/week @ 2024-07-02 794/week @ 2024-07-09

每月下载量约3,379
6crate中使用(直接使用5个)

ISC许可证

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

许可证

ISC。

依赖

约8–18MB
约252K SLoC