#edge-db #macro #client #derive #database-client

edgedb-derive

EdgeDB数据库客户端的派生宏

7个版本 (4个破坏性更新)

0.5.2 2024年5月9日
0.5.1 2023年6月22日
0.5.0 2023年5月15日
0.4.0 2022年7月26日
0.1.0 2020年10月23日

#10 in #edge-db

Download history 88/week @ 2024-04-25 112/week @ 2024-05-02 199/week @ 2024-05-09 89/week @ 2024-05-16 120/week @ 2024-05-23 111/week @ 2024-05-30 171/week @ 2024-06-06 262/week @ 2024-06-13 114/week @ 2024-06-20 150/week @ 2024-06-27 151/week @ 2024-07-04 98/week @ 2024-07-11 135/week @ 2024-07-18 115/week @ 2024-07-25 82/week @ 2024-08-01 70/week @ 2024-08-08

每月下载 431
用于 5 crates

MIT/Apache

23KB
490

EdgeDB Rust绑定:派生包

此包包含EdgeDB客户端的派生宏。

许可证

许可方式为以下之一:

由您选择。


lib.rs:

允许结构体和枚举通过数据库查询进行填充的派生宏。

此派生宏可用于具有命名字段的结构体(在EdgeDB中对应于“形状”)。请注意,字段顺序很重要,因此下面的结构体对应于EdgeDB中的User查询,首先是first_name,然后是age。如果Rust结构体中的字段顺序与查询形状中的字段顺序不同,则将返回DescriptorMismatch

#[derive(Queryable)]
struct User {
first_name: String,
age: i32,
}

这允许查询直接解包到类型中,而不是与Value枚举一起工作。

let query = "select User { first_name, age };";
// With Queryable:
let query_res: Vec<User> = client.query(query, &()).await?;
// Without Queryable:
let query_res: Vec<Value> = client.query(query, &()).await?;

字段属性

JSON

#[edgedb(json)]属性使用serde_json而不是EdgeDB二进制协议来解码字段。如果某些数据以JSON格式存储在数据库中,但需要对其进行处理,则非常有用。底层类型必须实现serde::Deserialize


#[derive(Queryable)]
struct User {
#[edgedb(json)]
user_notes: HashMap<String, String>,
}

容器属性

JSON

可以使用 #[edgedb(json)] 属性从返回的 JSON 中解包结构。底层类型必须实现 serde::Deserialize

#[derive(Queryable, serde::Deserialize)]
#[edgedb(json)]
struct JsonData {
field1: String,
field2: u32,
}

这允许查询直接解包到类型中,而不需要使用 serde_json::from_str 的中间步骤。

let query = "select <json>JsonData { field1, field2 };";
let query_res: Vec<JsonData> = client.query(query, &()).await?;

依赖

~1.1–9.5MB
~81K SLoC