## `rucmd` 目录解析
`rucmd` 是项目的**命令行工具层**,提供统一的 CLI 入口,支持加密解密、配置查看、DI 代码生成、日志管理等命令行操作,并通过 DI 容器注册为全局单例。
### 文件结构
```
rucmd/
├── mod.rs # 模块导出
├── rucmd.rs # 核心命令执行器 RuCmd
├── rucmd_init.rs # RuCmd 的 DI 注册(自动生成)
├── rucmd_test.rs # 命令测试
└── ruframe/ # 命令框架子模块
├── mod.rs
├── commandline.rs # 单条命令数据结构
├── commandlines.rs # 命令集合管理器
└── commandlines_init.rs # CommandLines 的 DI 注册(自动生成)
```
---
### 核心设计:`RuCmd` 命令执行器
[rucmd.rs](file:///E:/soft/gitee.com/ruwebframe/src/rucmd/rucmd.rs) 是整个 CLI 的核心:
```rust
pub struct RuCmd {} // 无字段,纯方法驱动
```
实现了 `BaseEntitySingle`(单例模式),全局只有一个实例。
---
### 支持的命令一览
通过 `execute(args)` 方法统一路由,根据 `args[1]` 匹配:
| `enc <text>` | — | **加密文本**(AES-256-GCM) | `enc()` → `ruenc::enc()` |
| `dec <text>` | — | **解密文本** | `dec()` → `ruenc::dec()` |
| `cfg` | — | 查看完整配置(JSON) | `list_config()` |
| `cfg env` | — | 查看 software 配置 | `list_config()` |
| `cfg db` | — | 查看 datasource 配置 | `list_config()` |
| `cfg redis` | — | 查看 Redis 配置 | `list_config()` |
| `cfg web` | — | 查看 Web 配置 | `list_config()` |
| `rudi list` | — | **列出所有结构体** | `rudi()` → `difactroy::list_di()` |
| `rudi all` | — | **为所有结构体生成 DI 注入代码** | `rudi()` → `difactroy::make_di()` |
| `rudi <name>` | — | 为指定结构体生成 DI 代码 | `rudi()` → `difactroy::make_di_one()` |
| `version` / `v` | — | 显示版本号 | `version()` |
| `help` / `h` | — | 显示帮助信息 | `help()` |
| `inst` / `i` | `cmd/data/config/web/all` | 安装依赖(预留) | `inst()` |
| `list` | `<dir>` | 列出指定目录日志文件 | `list_log()` |
---
### 命令路由机制
```rust
pub fn execute(&self, args: &Vec<String>) {
if args.len() >= 2 {
match args[1].as_str() {
"enc" => self.enc(&args),
"dec" => self.dec(&args),
"config" => self.list_config(&args),
"rudi" => self.rudi(&args),
"version" | "v" => self.version(),
"h" | "help" => self.help(),
"i" | "inst" => self.inst(&args),
"list" => self.list_log(args),
_ => {} // 未知命令静默忽略
}
}
}
```
设计简洁:`args[0]` 是程序名,`args[1]` 是主命令,`args[2..]` 是子命令/参数。
---
### 关键功能详解
#### 1. 加密解密(`enc` / `dec`)
```rust
pub fn enc(&self, args: &Vec<String>) {
let result = ruenc::find_bean_ruenc().unwrap().enc(&args[2]);
println!("{}", result);
}
```
直接委托给 `ruenc` 模块的 AES-256-GCM 加解密,用于敏感配置字段的加密存储。
#### 2. 配置查看(`cfg`)
支持按模块查看配置:
- `cfg` → 全部配置 JSON
- `cfg env` → `software` 配置
- `cfg db` → `datasource` 配置
- `cfg redis` → `redis` 配置
- `cfg web` → `web` 配置
#### 3. DI 代码生成(`rudi`)
这是最核心的自动化能力:
- `rudi list` → 列出所有可自动注入的结构体
- `rudi all` → 批量为所有结构体生成 `*_init.rs` DI 注册代码
- `rudi <name>` → 为指定结构体生成
依赖于 `difactroy`(DI 工厂)模块。
#### 4. 日志文件查看(`list`)
```rust
fn list_log(&self, args: &Vec<String>) {
let mut dto = FileDto::new();
if args.len() >= 2 {
dto.set_dir(args[2].as_str().to_string());
}
let files = fileutils::list_files(&dto);
// ...
}
```
---
### `ruframe` 子模块 — 命令框架(预留)
这是一个**可扩展的命令注册框架**,目前处于早期阶段:
| [commandline.rs](file:///E:/soft/gitee.com/ruwebframe/src/rucmd/ruframe/commandline.rs) | 单条命令的数据结构:`cmd`(命令名)、`args`(参数)、`cmdHelp`(帮助文本) |
| [commandlines.rs](file:///E:/soft/gitee.com/ruwebframe/src/rucmd/ruframe/commandlines.rs) | 命令集合管理器:`Vec<CommandLine>` 用 `Mutex` 包裹,提供 `reg()` 注册方法 |
| [commandlines_init.rs](file:///E:/soft/gitee.com/ruwebframe/src/rucmd/ruframe/commandlines_init.rs) | DI 注册(多例模式) |
设计意图是让命令可动态注册,但 `CommandLine` 中的 `cmdFn` 字段被注释掉了,`reg()` 方法也只是 push 了一个默认值,说明这个可扩展框架还在开发中。
---
### DI 注册
```rust
// RuCmd: 单例模式
direg::register_singleton(SINGLE_BEAN_NAME, RuCmd::default);
// CommandLines: 多例模式
direg::register(SINGLE_BEAN_NAME, CommandLines::default);
```
获取方式:`rucmd::find_bean_rucmd().unwrap()`
---
### 架构定位
```
┌──────────────────────────────────────────────────┐
│ rucmd (CLI 层) │
│ │
│ ┌──────────┐ ┌──────────────────────────┐ │
│ │ RuCmd │────→│ execute(args) 命令路由 │ │
│ │ (单例) │ │ │ │
│ └──────────┘ │ enc/dec → ruenc │ │
│ │ cfg → rucfg │ │
│ │ rudi → difactroy │ │
│ │ list → fileutils │ │
│ └──────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ ruframe (命令框架 - 预留) │ │
│ │ CommandLine / CommandLines │ │
│ │ → 可扩展的动态命令注册 │ │
│ └──────────────────────────────────────────┘ │
└──────────────┬───────────────────────────────────┘
│ 依赖
┌──────────┼──────────┬───────────┐
▼ ▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────────┐ ┌──────────┐
│ruenc │ │rucfg │ │difactroy │ │ fileutils│
│加密解密│ │配置 │ │DI工厂 │ │ 文件工具 │
└──────┘ └──────┘ └──────────┘ └──────────┘
```
---
### 使用示例
```bash
# 加密密码
rucmd enc "my_secret_password"
# 解密
rucmd dec "base64_encoded_ciphertext"
# 查看当前配置
rucmd config
rucmd config db
rucmd config redis
# 生成 DI 代码
rucmd rudi list # 查看所有结构体
rucmd rudi all # 批量生成
rucmd rudi Person # 单独生成
# 查看日志
rucmd list ./logs
# 帮助
rucmd help
```
**总结**:`rucmd` 是项目的 CLI 工具集,将加密解密、配置查看、DI 代码生成、日志管理等运维操作统一封装为命令行,通过 `execute()` 方法实现简单路由,各功能委托给对应底层模块执行。`ruframe` 子模块预留了可扩展的命令注册框架,为未来动态添加命令提供了基础。