#surrealdb #id #deserialize #serialization #consistency #safety #surreal

surreal-id

一个用于轻松创建与 SurrealDB 一起使用的 ID 类型的包

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

Download history 130/week @ 2024-04-21 22/week @ 2024-04-28 2/week @ 2024-05-05 170/week @ 2024-05-12 34/week @ 2024-05-19 56/week @ 2024-05-26 18/week @ 2024-06-02 142/week @ 2024-06-09 31/week @ 2024-06-16 23/week @ 2024-06-23 24/week @ 2024-06-30 29/week @ 2024-07-07 10/week @ 2024-07-14 23/week @ 2024-07-21 37/week @ 2024-07-28

每月下载量 111

MIT/Apache 许可协议

17KB
73

Crates.io Documentation Codecov Dependency status

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.0 许可协议定义的,您提交的任何有意包含在作品中的贡献,都将按照上述方式双重许可,不附加任何额外的条款或条件。

依赖关系

~44–59MB
~1M SLoC