SZ-Rust Addons Loader — 插件加载器
对标 PHP zzstudio/think-addons 的 Rust 实现,提供插件发现/清单解析/注册/路由解析能力。
PHP 对齐
| PHP 模块 | Rust 模块 | 子任务 |
|---|---|---|
think\addons\Service |
loader::AddonLoader |
10.1 |
think\Addons::getInfo() |
manifest::parse_manifest |
10.1 |
spl_autoload_register(helper.php) |
autoload::AddonAutoload |
10.1 |
| 隐式插件状态管理 | registry::AddonRegistry |
10.2 |
think\addons\Route::execute |
route::parse_route |
10.3 |
think\Route::resource |
resource::build_resource_routes |
10.3.5 |
模块结构
sz-rust-addons-loader/
├── Cargo.toml
└── src/
├── lib.rs # 主入口(重导出)
├── error.rs # 错误类型
├── loader.rs # AddonLoader(对齐 Service.php)
├── manifest.rs # 清单解析(对齐 Addons::getInfo)
├── autoload.rs # 自动加载(对齐 spl_autoload_register)
├── registry.rs # 注册中心(对齐插件状态管理)
├── route.rs # 路由解析(对齐 Route::execute)
└── resource.rs # 资源路由注入(对齐 Route::resource)
用法
use AddonLoader;
let loader = new;
let errors = loader.register.unwrap;
// errors 包含解析失败的插件错误(不中断整体扫描)
let route = loader.parse_route.unwrap;
assert_eq!;
assert_eq!;
assert_eq!;
不支持(与 PHP 差异)
- 不实际加载 PHP 文件:Rust 无法直接执行 PHP,仅解析
$info数组 - 不实现钩子自动扫描:PHP 通过反射收集 Plugin.php 非基类方法作为钩子,Rust 侧需调用方显式注册
- 不实现
service.ini容器绑定:Rust 侧无容器概念,由调用方根据需要处理 - 不实现
_empty兜底方法:对齐 PHPis_callable([$instance, '_empty']),但需调用方实现