#proc-macro #surrealdb #template #generate #extra #cargo #attributes

surrealdb-extras-proc-macro

一个用于快速启动过程宏crate的 cargo generate 模板

3个版本

0.1.3 2024年2月26日
0.1.2 2024年1月30日
0.1.1 2024年1月30日

#1729 in 过程宏

Download history 20/week @ 2024-03-11 124/week @ 2024-03-25 31/week @ 2024-04-01 5/week @ 2024-05-20 2/week @ 2024-05-27 4/week @ 2024-06-03 146/week @ 2024-06-10

每月150次下载
surrealdb-extras 中使用

MIT 许可证

12KB
167

一个简单的库,用于建立连接并设置/创建namespace&db以及设置属性的类型

示例

pub async fn establish(path: PathBuf) -> surrealdb::Result<Surreal<Db>> {
    let conn = Surreal::new::<SpeeDb>((path.join("db"), Config::default().strict()));
    surrealdb_extras::use_ns_db(conn, "test", "test", vec![Test::register]).await
}

#[derive(surrealdb_extras::SurrealTableEntry, Deserialize, Serialize, Clone, Default)]
#[db("test_table")]
#[sql(["DEFINE EVENT test_table_updated ON TABLE test_table WHEN $event = \"UPDATE\" AND $before.updated == $after.updated THEN (UPDATE $after.id SET updated = time::now() );"])]
struct Test {
    random_number: i32,
    /// renamed field
    #[opt(rename = "new_name")]
    #[serde(rename = "new_name")]
    data: String,
    /// overwrites the detected db type
    #[opt(db_type = "string")]
    data: CustomStructWithSerialize,
    /// will be excluded in get_or_insert check
    #[opt(exclude = true)]
    updated: Datetime
}

pub async fn demo() {
    let conn = establish(PathBuf::new()).await.unwrap();
    let test = Test::default();

    // creates new item with custom id and return self
    let _: Option<Test> = test
        .clone()
        .insert(&conn, Some(sql::Id::rand()))
        .await
        .unwrap();
        
    // creates new item with random id and return record
    let v: surrealdb_extras::Record = test.add(&conn).await.unwrap().unwrap();
    
    // delete record
    let v: Option<surrealdb_extras::Record> = v.delete(&conn).await.unwrap();
}

ThingFunc 中的有用函数

  • ThingFunc
  • SurrealTableInfo

ThingType、RecordData、Record中的函数来自ThingFunc

分类

初始化
  • use_ns_db
  • impl SurrealTableInfo(使用 #[derive(SurrealTable, Serialize, Deserialize)])
反序列化
  • impl SurrealSelectInfo(使用 #[derive(SurrealSelect, Deserialize)]#[derive(SurrealTable, Serialize, Deserialize)])
  • 记录
  • RecordData
  • ThingFunc(在结构体内部)
  • ThingType(在结构体内部)
序列化
  • impl SurrealTableInfo(使用 #[derive(SurrealTable, Serialize, Deserialize)])
  • ThingFunc(在结构体内部)
  • ThingType(在结构体内部)

依赖

~3MB
~64K SLoC