12 个版本 (5 个重大更改)
0.6.0 | 2024年7月28日 |
---|---|
0.5.2 | 2024年7月18日 |
0.4.1 | 2024年6月11日 |
0.3.1 | 2024年6月9日 |
0.1.1 | 2024年6月5日 |
#290 in FFI
每月557次下载
30KB
283 行
一个简单的库,可以将 tokio_postgres::row::Row
数据消费到实现了 RowConsumer
特性的结构体。
该包提供了一系列可衍生的实现,可以用来根据偏好消费 PostgreSQL 数据。
from_row
from_rows
consume
consume_json
如果启用了consume_json
功能
后者的实现是从 from_row
构建的。
功能
各种功能提供对附加实现和类型的支持。
功能 | 描述 | 额外依赖 | 默认 |
---|---|---|---|
bit |
在 bit_vec::BitVec 上实现包 |
bit-vec | 否 |
chrono |
在 chrono 提供的类型上实现包 | chrono | 否 |
consume_json |
在实现了 RowConsumer 特性的类上实现 consume_json |
serde, serde_json | 否 |
geo |
在 geo_types::Point<f64> 、geo_types::Rect<f64> 和 geo_types::LineString<f64> 上实现 crate |
geo-types | 否 |
mac |
在 eui48::MacAddress 上实现 crate |
eui48 | 否 |
json |
在 serde_json::Value 上实现 crate |
serde_json | 否 |
time |
在 time 提供的类型上实现 crate | time | 否 |
uuid |
在 uuid::Uuid 上实现 crate |
uuid | 否 |
示例
您可以使用 consume
来将 PostgreSQL 行数据消费到一个结构体中,如下所示。
# tokio_test::block_on(async {
use pgde::ConsumeError;
use pgde::RowConsumer;
use pgde_derive::RowConsumer;
use tokio_postgres::{NoTls, Row};
#[derive(RowConsumer)]
struct Foo {
Id: i32,
Data: String,
}
match tokio_postgres::connect("host=localhost user=postgres password=password dbname=postgres", NoTls).await {
Ok(v) => {
let client = v.0;
let conn = v.1;
tokio::spawn(async move {
if let Err(e) = conn.await {
eprintln!("connection error: {}", e);
}
});
let query = "select * from public.\"Foo\";";
match Foo::consume(&client, query, &[]).await {
Ok(v) => { // v is of type Vec<Foo>
match v.first() {
Some(v) => println!("Id {} has Data {}", v.Id, v.Data),
None => eprintln!("No data in table"),
}
},
Err(v) => match v {
ConsumeError::ConversionError => eprintln!("Could not convert data"),
ConsumeError::DatabaseConnectionError => eprintln!("Database errored on processing the query"),
},
};
},
Err(_) => eprintln!("Could not connect to database"),
};
# })
支持 Vec<T>
和 Option<T>
类型的类型,其中 T
实现 FromSql
,可以在结构体中使用,也可以作为独立的消费类型,继承 RowConsumer
。查询可空字段时,最好将字段类型包裹在 Option<>
中。请参阅 RowConsumer
trait 以了解 from_row
和 from_rows
的使用示例。
此 crate 还提供对各种数据类型的实现,其中一些通过启用功能提供。
类型 | 功能 |
---|---|
bool |
default |
i8 |
default |
i16 |
default |
i32 |
default |
u32 |
default |
i64 |
default |
f32 |
default |
f64 |
default |
Vec<u8> |
default |
String |
default |
SystemTime |
default |
IpAddr |
default |
bit_vec::BitVec |
bit |
chrono::NaiveDateTime |
chrono |
chrono::DateTime<Utc> |
chrono |
chrono::DateTime<Local> |
chrono |
chrono::DateTime<FixedOffset> |
chrono |
chrono::NaiveDate |
chrono |
chrono::NaiveTime |
chrono |
geo_types::Point<f64> |
geo |
geo_types::Rect<f64> |
geo |
geo_types::LineString<f64> |
geo |
eui48::MacAddress |
mac |
serde_json::Value |
json |
time::PrimitiveDateTime |
time |
time::OffsetDateTime |
time |
time::Date |
time |
time::Time |
time |
uuid::Uuid |
uuid |
测试
测试需要访问没有表的 PostgreSQL 数据库。设置以下环境变量将允许您进行测试。
环境变量 | 描述 |
---|---|
PGDE_DB_HOST |
数据库可访问的主机。 |
POSTGRES_USER |
要提供的用户凭据。 |
POSTGRES_PASSWORD |
要提供的密码。 |
POSTGRES_DB |
用于测试的数据库名称。 |
依赖项
~7–18MB
~254K SLoC