6 个版本 (1 个稳定版)
1.0.0 | 2024 年 5 月 13 日 |
---|---|
0.2.2 | 2024 年 1 月 26 日 |
0.2.1 | 2023 年 10 月 5 日 |
0.1.1 | 2023 年 9 月 22 日 |
在 解析器实现 中排名第 668
每月下载量 111
17KB
73 行
surreal-id
surreal-id
包提供了一种标准化的方式来创建和验证应用程序中用于 SurrealDB 的 IDs。使用 NewId
特性,该包通过提供对 new
的泛型实现来简化 ID 类型定义过程,该实现可以处理格式错误或空 ID 等错误,并确保与 SurrealDB 的表名和功能的兼容性。这还使开发者能够在应用层创建自定义 ID,并安全地从 SurrealDB 反序列化和序列化这些类型,确保整个应用中的类型安全和一致性。
示例
use serde::{Deserialize, Serialize};
use surreal_id::NewId;
use surrealdb::{opt::RecordId, sql::Id};
pub const USERS_TABLE: &str = "users";
#[derive(Serialize, Deserialize)]
pub struct UserId(RecordId);
impl NewId for UserId {
const TABLE: &'static str = USERS_TABLE;
fn from_inner_id<T: Into<Id>>(inner_id: T) -> Self {
UserId(RecordId {
tb: Self::TABLE.to_string(),
id: inner_id.into(),
})
}
fn get_inner_string(&self) -> String {
self.0.id.to_string()
}
}
现在您可以使用 new
实例化 UserId
类型,并在您的结构体中使用 SurrealDB 如下所示
#[derive(Serialize, Deserialize)]
pub struct User {
id: UserId,
name: String,
}
// The new function is automatically created for us
// by the blanket implementation from the NewId trait
let typesafe_custom_id = UserId::new("fa77edc3-56ed-4208-9e0b-c0b1c32e2d34").unwrap();
let user_to_be_created = User {
id: typesafe_custom_id,
name: "John Doe".to_string(),
};
let db = Surreal::new::<Mem>(()).await.unwrap();
db.use_ns("test").use_db("test").await.unwrap();
let create_result = db.create(USERS_TABLE).content(&user_to_be_created).await;
let retrieved_user: User = create_result.unwrap().remove(0);
assert_eq!(user_to_be_created, retrieved_user)
您的自定义 ID 类型还免费获得以下方法
typesafe_custom_id.table() // returns "users"
typesafe_custom_id.id_with_brackets() // returns "⟨fa77edc3-56ed-4208-9e0b-c0b1c32e2d34⟩"
typesafe_custom_id.id_without_brackets() // returns "fa77edc3-56ed-4208-9e0b-c0b1c32e2d34"
许可证
根据您的选择,许可协议为以下之一
- Apache 许可协议第 2 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据 Apache-2.0 许可协议定义的,您提交的任何有意包含在作品中的贡献,都将按照上述方式双重许可,不附加任何额外的条款或条件。
依赖关系
~44–59MB
~1M SLoC