#diesel #generation #database-schema #crud #codegen #database

bin+lib dsync

从 diesel 模式文件生成 rust 结构体和查询函数

16 个版本

0.0.17 2023 年 9 月 4 日
0.0.17-beta 2023 年 9 月 29 日
0.0.16 2023 年 8 月 20 日
0.0.14 2023 年 7 月 15 日
0.0.3 2022 年 10 月 28 日

#68 in FFI

Download history 28/week @ 2024-04-08 72/week @ 2024-04-15 38/week @ 2024-04-22 109/week @ 2024-04-29 59/week @ 2024-05-06 180/week @ 2024-05-13 181/week @ 2024-05-20 104/week @ 2024-05-27 152/week @ 2024-06-03 78/week @ 2024-06-10 59/week @ 2024-06-17 93/week @ 2024-06-24 53/week @ 2024-07-01 80/week @ 2024-07-08 63/week @ 2024-07-15 108/week @ 2024-07-22

314 每月下载量

MIT/Apache

105KB
2.5K SLoC

dsync

License: MIT OR Apache-2.0

一个用于从 diesel 模式文件生成数据库结构和查询代码的工具。主要用于 create-rust-app

目前,生成代码比使用宏推导代码更有优势,因为当涉及到宏展开时,智能感应和自动完成功能还不完善。

演示

给定以下模式

// schema.rs
diesel::table! {
    todos (id) {
        id -> Int4,
        text -> Text,
        completed -> Bool,
    }
}

我们运行

cargo dsync -i schema.rs -o models

现在我们拥有了所需的一切!

use models::todos;

async fn demo(db: Connection) {
  let created_todo = todos::create(&mut db, todos::CreateTodo {
    text: "Create a demo",
    completed: false,
  }).await?;
  
  let todos_list = todos::paginate(&mut db, 1, 10).await?;
  
  let updated_todo = todos::update(&mut db, created_todo.id, UpdateTodo {
    text: created_todo.text,
    completed: true,
  }).await?;
}

有关完整示例,请参阅 test/simple_table/schema.rs,它生成了 test/simple_schema/models 中的所有代码。

用法

  1. 添加此crate

    cargo add dsync
    
  2. 在您的项目中创建一个新的二进制文件,该文件使用此crate(例如,bin/dsync.rs

    use std::{collections::HashMap, path::PathBuf};
    use dsync::{GenerationConfig, TableOptions};
    
    pub fn main() {
        let dir = env!("CARGO_MANIFEST_DIR");
    
        dsync::generate_files(
            PathBuf::from_iter([dir, "src/schema.rs"]), 
            PathBuf::from_iter([dir, "src/models"]), 
            GenerationConfig { /* ... your generation options ... */ }
        );
    }
    
  3. 创建一个 Cargo.toml 二进制条目

    [[bin]]
    name = "dsync"
    path = "bin/dsync.rs"
    
  4. 执行!

cargo run --bin dsync

提示:要使用 cargo dsync,请在 .cargo/config 中创建别名

[alias]
dsync="run --bin dsync"

预构建二进制文件

设置自定义二进制文件可以使您完全自定义生成;但是,如果不需要完全自定义,您可以直接安装 CLI(您需要通过定期运行此命令来确保它保持最新状态)

cargo install dsync 

CLI 使用方法

  • -:输入参数:模式文件路径
  • -:输出参数:生成代码应写入的目录路径
  • -c:连接类型(例如:diesel::r2d2::PooledConnection<diesel::r2d2::ConnectionManager<diesel::PgConnection>>)
  • -g:(可选) 自动由创建/更新触发器生成的列列表(例如,created_atupdated_at
  • --tsync:(可选) 向生成的结构体添加 #[tsync] 属性(见 https://github.com/Wulf/tsync
  • --model-path:(可选) 设置自定义模型导入路径,默认 crate::models::
  • --schema-path:(可选) 设置自定义模式导入路径,默认 crate::schema::
  • --no-serde:(可选) 如果设置,则不输出任何 serde 相关代码
  • 注意:CLI 有防止意外覆盖文件的故障安全措施
dsync -i src/schema.rs -o src/models

文档

请参阅 dsync --help 获取更多信息。

欢迎提交支持或功能请求的工单。

开发/测试

使用 ./test/test_all.sh 运行测试。运行测试后,./test 中的文件不应有任何意外更改(使用 git statusgit diff 查看是否有更改)。

许可

此工具在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。

请参阅 LICENSE-APACHE、LICENSE-MIT 和 COPYRIGHT 以获取详细信息。

依赖项

~3MB
~56K SLoC