ruwebframe 0.1.8

a simple webframe for rust actix-web, based on rudi and rbatis.
Documentation
 
## ruweb 目录结构


```
ruweb/
├── mod.rs              — 模块入口
├── readme.MD
├── webserver/          — Web 服务器(启动、配置)
│   ├── mod.rs
│   ├── ruapp.rs        — RuApp 核心
│   ├── ruapp_init.rs   — DI 自动注入
│   ├── start_web.rs    — 统一入口
│   ├── example.rs      — 旧代码
│   └── readme.MD
├── webrouter/          — 路由系统(注册、容器)
│   ├── mod.rs          — 导出 + reg_route! 宏
│   ├── route_container.rs — RouteConfigContainer + register_route
│   ├── route_factroy.rs   — OnceLock 全局容器 + with_container_mut
│   └── ctl/            — 路由构建器 + 示例 handler
│       ├── mod.rs
│       ├── ctl.rs          — manual_hello handler
│       ├── routebuilder.rs — RouteBuilder + route_get/post/put/delete
│       └── routebuilder_init.rs — DI 自动注入
├── webclient/          — HTTP 客户端(空)
│   ├── mod.rs
│   └── readme.MD
└── webmiddle/          — 中间件(空)
    ├── mod.rs
    └── readme.MD
```

Let me now present the analysis.
## `ruweb/` 完整目录结构


```
ruweb/
├── mod.rs                     — 入口:导出 4 个子模块
├── readme.MD
│
├── webserver/                 — 【Web 服务器层】
│   ├── start_web.rs           — 统一入口:命令行 / Web 分流
│   ├── ruapp.rs               — RuApp 核心:HttpServer 启动
│   ├── ruapp_init.rs          — DI 自动注入(自动生成)
│   └── example.rs             — 旧示例代码(全部注释)
│
├── webrouter/                 — 【路由系统层】
│   ├── mod.rs                 — 导出 + reg_route! 宏
│   ├── route_factroy.rs       — ⭐ OnceLock 全局容器 + with_container_mut
│   ├── route_container.rs     — RouteConfigContainer + register_route
│   └── ctl/                   — 路由构建器 + 示例 handler
│       ├── ctl.rs             — manual_hello 等 handler
│       ├── routebuilder.rs    — RouteBuilder + route_get/post/put/delete
│       └── routebuilder_init.rs — DI 自动注入
│
├── webclient/                 — 【HTTP 客户端】(待开发)
└── webmiddle/                 — 【中间件】(待开发)
```

---

## 三层架构


```
┌─────────────────────────────────────────────────────┐
│  webserver (启动层)                                  │
│  start_web → RuApp.run() → HttpServer::new          │
│                    │                                 │
│                    │ configure(|cfg| ...)            │
│                    ▼                                 │
│  ┌─────────────────────────────────────────────┐    │
│  │  webrouter (路由层)                          │    │
│  │                                              │    │
│  │  ┌──────────────────┐  ┌──────────────────┐ │    │
│  │  │ route_factroy.rs │  │ route_container  │ │    │
│  │  │                  │  │    .rs           │ │    │
│  │  │ OnceLock<Mutex<                           
       RouteConfig       Mutex<Vec<Box<        
       Container>>    │  │   RouteConfigFn>>│ │    │
│  │  │                  │  │                  │ │    │
│  │  │ with_container   │  │ add()            │ │    │
│  │  │ _mut()           │  │ apply_routes()   │ │    │
│  │  └────────┬─────────┘  └────────┬─────────┘ │    │
│  │           │                     │            │    │
│  │  ┌────────┴─────────────────────┴──────────┐ │    │
│  │  │  ctl/routebuilder.rs                    │ │    │
│  │  │  RouteBuilder + route_get/post/put/del  │ │    │
│  │  └─────────────────────────────────────────┘ │    │
│  │                                              │    │
│  │  reg_route! 宏 (mod.rs)                      │    │
│  └─────────────────────────────────────────────┘    │
│                                                      │
│  ┌─────────────────────────────────────────────┐    │
│  │  webclient (客户端层) — 空                    │    │
│  ├─────────────────────────────────────────────┤    │
│  │  webmiddle (中间件层) — 空                    │    │
│  └─────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────┘
```

---

## 核心数据流

```
各模块 register()
    │
    │  reg_route!(name, "/path", get, handler)
    │       │
    │       ├── fn name(cfg) { cfg.route(...) }  // 生成函数
    │       └── register_route(name)             // 注册
    │              │
    │              └── with_container_mut(|c| c.add(name))
    │                     │
    │                     └── Mutex<Vec<Box<RouteConfigFn>>>.push()
    │
    ▼
HttpServer::new(|| App::new().configure(|cfg| {
    with_container_mut(|c| c.apply_routes(cfg))  // 遍历执行
}))
```

---

## 关键文件速查

| 文件 | 职责 | 核心 API |
|------|------|---------|
| [route_factroy.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webrouter/route_factroy.rs) | 全局容器 | `OnceLock<Mutex<RouteConfigContainer>>`, `with_container_mut()` |
| [route_container.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webrouter/route_container.rs) | 路由存储 | `add()`, `apply_routes()`, `register_route()` |
| [mod.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webrouter/mod.rs) | 宏定义 | `reg_route!(name, path, get, handler)` |
| [routebuilder.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webrouter/ctl/routebuilder.rs) | 构建器 | `RouteBuilder`, `route_get()`, `route_post()` |
| [ruapp.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webserver/ruapp.rs) | 启动 | `RuApp::run()` → `HttpServer::new` |
| [start_web.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webserver/start_web.rs) | 入口 | `start_web()` 命令行/Web 分流 |

## 两套路由系统对比

| | `RouteConfigContainer` | `RouteBuilder` |
|------|------|------|
| 存储 | `Mutex<Vec<Box<RouteConfigFn>>>` | `Arc<Mutex<Vec<Box<dyn Fn>>>>` |
| 访问 | `OnceLock` 全局静态 | DI 容器 `find_bean_routebuilder()` |
| 注册 | `register_route(fn)` | `builder.add(closure)` |
| 应用 | `apply_routes(cfg)` | `apply(cfg)` |
| 现状 | ✅ 主力使用 | 备用(`ctl/` 内) |