rucmd 0.1.2

a simple ttool rucmd.
rucmd-0.1.2 is not a library.

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 是整个 CLI 的核心:

pub struct RuCmd {}  // 无字段,纯方法驱动

实现了 BaseEntitySingle(单例模式),全局只有一个实例。


支持的命令一览

通过 execute(args) 方法统一路由,根据 args[1] 匹配:

命令 子命令 功能 调用的方法
enc <text> — 加密文本(AES-256-GCM) enc() → ruenc::enc()
dec <text> — 解密文本 dec() → ruenc::dec()
conf — 查看完整配置(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()

命令路由机制

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)

pub fn enc(&self, args: &Vec<String>) {
    let result = ruenc::find_bean_ruenc().unwrap().enc(&args[2]);
    println!("{}", result);
}

直接委托给 ruenc 模块的 AES-256-GCM 加解密,用于敏感配置字段的加密存储。

2. 配置查看(conf)

支持按模块查看配置:

  • conf → 全部配置 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)

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 单条命令的数据结构:cmd(命令名)、args(参数)、cmdHelp(帮助文本)
commandlines.rs 命令集合管理器:Vec<CommandLine> 用 Mutex 包裹,提供 reg() 注册方法
commandlines_init.rs DI 注册(多例模式)

设计意图是让命令可动态注册,但 CommandLine 中的 cmdFn 字段被注释掉了,reg() 方法也只是 push 了一个默认值,说明这个可扩展框架还在开发中。


DI 注册

// 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     → ruconf          │    │
│                    │ rudi    → difactroy      │    │
│                    │ list    → fileutils      │    │
│                    └──────────────────────────┘    │
│                                                    │
│  ┌──────────────────────────────────────────┐    │
│  │  ruframe (命令框架 - 预留)                  │    │
│  │  CommandLine / CommandLines               │    │
│  │  → 可扩展的动态命令注册                     │    │
│  └──────────────────────────────────────────┘    │
└──────────────┬───────────────────────────────────┘
               │ 依赖
    ┌──────────┼──────────┬───────────┐
    ▼          ▼          ▼           ▼
┌──────┐ ┌──────┐ ┌──────────┐ ┌──────────┐
│ruenc │ │ruconf │ │difactroy │ │ fileutils│
│加密解密│ │配置  │ │DI工厂     │ │ 文件工具  │
└──────┘ └──────┘ └──────────┘ └──────────┘

使用示例

# 加密密码

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 子模块预留了可扩展的命令注册框架,为未来动态添加命令提供了基础。