rucmd-0.1.3 is not a library.
src/rucmd 模块讲解
rucmd 是 ruwebframe 框架的 命令行工具层,提供统一的 CLI 入口,支持加密解密、配置查看、DI 代码生成、依赖安装、实体代码生成等功能。下面逐一解析每个文件。
📁 文件结构
rucmd/
├── mod.rs # 模块声明与导出
├── ru_cmd.rs # 核心命令执行器(RuCmd)
├── ru_cmd_init.rs # RuCmd 的 DI 自动注册
├── ru_cmd_test.rs # 命令测试用例
└── readme.MD # 已有文档
1️⃣ mod.rs — 模块入口
pub use *;
- 声明
ru_cmd和ru_cmd_init子模块 - 通过
pub use ru_cmd::*重新导出所有公共项,外部可直接use rucmd::... - 测试模块仅在
cfg(test)时编译
2️⃣ ru_cmd.rs — 核心命令执行器
结构体与单例设计
RuCmd 是一个无字段的空结构体,纯方法驱动。通过实现 BaseEntitySingle trait,它被注册为 全局单例 Bean。
命令路由:execute() 方法(第262行)
这是整个 CLI 的核心入口,根据 args[1] 分发命令:
| args[1] | 子命令 | 功能 | 方法 |
|---|---|---|---|
enc |
<text> |
加密文本 | enc() → ruenc |
dec |
<text> |
解密文本 | dec() → ruenc |
conf |
env/db/redis/web |
查看配置 | list_conf() |
rudi |
list/all/<name>/force/suite/suites |
DI 代码生成 | rudi() → difactroy |
version/v |
— | 显示版本 | version() |
help/h |
— | 显示帮助 | help() |
i/inst |
cmd/data/conf/web/all/... |
安装依赖模板 | inst() |
list |
<dir> |
列出日志文件 | list_log() |
table |
<name>/all |
生成数据库实体 | make_table_entity() |
dbcode |
<table>/all |
生成 DB 实体代码 | find_bean_db_code() |
功能详解
🔐 加密解密(第75-83行)
直接委托给 ruenc 模块的 AES-256-GCM 加解密,用于敏感配置字段。
⚙️ 配置查看(第206-258行)
支持按模块过滤:conf env → software 配置,conf db → 数据源配置,conf redis → Redis 配置,conf web → Web 配置。
🏭 DI 代码生成(第84-112行) 这是最强大的自动化能力:
rudi list— 列出所有可自动注入的结构体rudi all— 批量生成所有结构体的 DI 注册代码rudi Person— 为指定结构体生成rudi force Person— 强制重新生成rudi suite Person— 生成测试套件rudi suites— 批量生成所有测试套件
📦 依赖模板安装(第113-204行)
inst 命令会将框架内置的模板目录拷贝到当前项目,例如:
支持的模板:all, mini, web, data, domain, task, cmd, conf, docker, test, docx, lib 等。
🗄️ 数据库实体生成(第413-438行)
底层调用 sea-orm-cli,自动为数据库表生成 Rust 结构体。
3️⃣ ru_cmd_init.rs — DI 自动注册
- 使用
ctor::ctor在程序启动时自动执行init(),将RuCmd注册到 DI 容器 find_bean_ru_cmd()是全局获取入口,返回Arc<RuCmd>- 文件头部注释说明 "StructInit自动生成,一般不要手动修改" — 由
rudi命令自动生成
4️⃣ ru_cmd_test.rs — 测试用例
测试覆盖了:
help()命令输出- DI 工厂的
make_di()/list_di() - 文件工具:
list_files,list_all_files_suffix,list_rs_files,find_dir,check_file_exists WinCmd命令执行
🏗️ 架构定位图
┌─────────────────────────────────────────────────────┐
│ rucmd (CLI 层) │
│ │
│ RuCmd.execute(args) ── 命令路由 ──┐ │
│ │ │
│ enc/dec ──── ruenc (加密) │ │
│ conf ──── ruconf (配置) │ │
│ rudi ──── difactroy (DI工厂) │ │
│ inst ──── copy_pkg_dir (模板拷贝) │ │
│ table ──── sea-orm-cli (实体生成) │ │
│ list ──── fileutils (文件) │ │
└─────────────────────────────────────┼─────────────────┘
│
DI 容器全局注册
│
▼
find_bean_ru_cmd() → Arc<RuCmd>
💡 设计亮点
- 单例 Bean 模式 — 通过
BaseEntitySingle+ctor自动注册,全局唯一实例 - 委托式架构 — RuCmd 本身不做具体业务,全部委托给底层模块(ruenc、ruconf、difactroy 等),职责清晰
- 代码生成自动化 —
rudi命令能自动生成 DI 注册代码,table/dbcode能自动生成数据库实体,大幅减少样板代码 - 模板化项目结构 —
inst命令可以一键把框架的各种模块模板拷贝到新项目中,实现快速 scaffolding