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
每月下载 431 次
用于 5 crates
23KB
490 行
EdgeDB Rust绑定:派生包
此包包含EdgeDB客户端的派生宏。
许可证
许可方式为以下之一:
- Apache许可证第2版,(./LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (./LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
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